1. 程式人生 > >Asp.net Core 入門實戰 2.請求流程

Asp.net Core 入門實戰 2.請求流程

圖片 入門 可能 其他 http請求 交流 stop 擴展 del

Asp.Net Core 是開源,跨平臺,模塊化,快速而簡單的Web框架.

Asp.net Core官網的一個源碼合集,方便一次性Clone,喜歡的(Star),本系列持續更新,也可以通過我的網站訪問,歡迎探討交流

接上一篇

目錄

  • 宿主
  • Kestrel Web服務器
  • 請求委托
  • 中間件
  • HTTP功能接口
  • 代碼模擬

技術分享圖片
asp.net core實現了一個跨平臺的宿主和web服務器. 一旦你調用了WebHost對象的Start方法,你就運行了一個監聽Http請求的Web服務器,它可以運行在32位的linux系統甚至是樹莓派上.然而在生產環境還是建議你使用一些反向代理工具,如Nginx,IIs,Apache等.為什麽需要反向代理,因為Kestrel只是一個簡單的Web服務器,其他語言像java,python,nodejs,ruby,你會看到一些Web服務器PM2或者Passenger結合反向代理工具使用.這些Web服務器提供了監控,日誌,負載均衡和流程管理功能,對於一個成熟的Web服務器而言.在Windows平臺,你可以使用IIS反向代理,在linux服務器使用nginx/apache來實現反向代理.

宿主

宿主WebHost用來配置服務器和處理請求管道.

public interface IWebHost:IDisposable
{
    //從Server加載Http功能接口列表
    IFeatureCollection ServerFeatures { get; }
    //服務容器
    IServiceProvider Services { get; }
    // 開始監聽端口
    void Start();
    //啟動主機
    Task StartAsync(CancellationToken cancellationToken = default(CancellationToken));
    //嘗試停止主機
    Task StopAsync(CancellationToken cancellationToken = default(CancellationToken));
}

Web服務器

Kestrel 是跨平臺 HTTP 服務器,它基於 libuv(一個跨平臺異步 I/O 庫). Web Server實現了IServer接口,實現了Http服務器.

public interface IServer
{
    //Http功能接口列表
    IFeatureCollection Features { get; }
    //開始處理請求
    Task StartAsync<TContext>(IHttpApplication<TContext> application, CancellationToken cancellationToken);
    // 停止請求處理,關閉服務器,盡可能的不是強制結束,而是等待請求處理結束後再停止
    Task StopAsync(CancellationToken cancellationToken);
}

請求委托

技術分享圖片
Asp.net Core包含了一組請求委托(RequestDelegate),請求委托處理Http請求, 這一組請求委托組成了請求管道.(Pipeline)

中間件(Middleware)

  • 為請求委托指定匿名方法,通過 Run、Map 和 Use 擴展方法來配置.
  • 為請求委托指定命名方法,通過UseMiddleware<類名稱>來配置,通過反射生成類的實例,再調用實例的Invoke方法或者InvokeAsync方法來實例化委托.

HTTP功能接口

  • Web Server的功能接口集合, 服務器定義的Http 功能接口和相應的中間件.

  • 請求上下文(Context)的功能接口集合,中間件可以更改該功能集合並添加新的HttpFeature接口支持.

迷你的代碼示例

middleware/Demo

以上內容有任何錯誤或不準確的地方請大家指正,不喜勿噴! 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。如果覺得還有幫助的話,可以點一下右下角的【推薦】,希望能夠持續的為大家帶來好的技術文章!想跟我一起進步麽?那就【關註】我吧。

Asp.net Core 入門實戰 2.請求流程