中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET Core的Middleware怎么使用

發布時間:2021-12-06 14:28:55 來源:億速云 閱讀:127 作者:iii 欄目:大數據

本篇內容主要講解“ASP.NET Core的Middleware怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“ASP.NET Core的Middleware怎么使用”吧!

結構

在ASP.NET Core里,每個從「瀏覽器傳入」的HTTP Request封包,會被系統封裝為「HttpRequest對象」,并且配置默認的HttpResponse對象、Session對象、ClaimsPrincipal對象...等等物件。接著將這些對象,封裝成為一個「HttpContext對象」,用來提供ASP.NET Core后續使用。

ASP.NET Core在收到HttpContext之后,會把它交給一個「Pipeline」去處理。這個Pipeline里面配置很多「Middleware」。系統會將HttpContext,依序傳遞給Pipeline里的Middleware去處理。每個Middleware會依照自己內部的程序邏輯,來運算處理HttpContext,并且變更HttpContext所封裝的對象內容。

ASP.NET Core在收到經由Middleware處理完畢的HttpContext之后,就會取出其中所封裝的HttpResponse對象。然后依照這個HttpResponse對象,來建立從「服務器回傳」的HTTP Response封包內容。

ASP.NET Core經由上述的系統結構,完成HTTP Request封包輸入、HTTP Response封包輸出的工作流程。

開發

在這個范例里,Middleware透過實做Invoke方法,來提供自己所封裝的程序邏輯。

public class HelloWorldMiddleware
{
    // Fields
    private readonly RequestDelegate _next;

    // Constructors
    public HelloWorldMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // Methods
    public Task Invoke(HttpContext context)
    {
        // Response
        context.Response.WriteAsync("Hello World!");

        // Return
        return Task.CompletedTask;
    }
}

在實做Middleware.Invoke方法的時候,開發人員可以透過HttpContext.Request,來取得從「瀏覽器傳入」的HTTP Request封包內容。在下列的范例程序代碼里,就是透過HttpContext.Request的Path、QueryString兩個屬性,來分別取得HTTP Request封包的URL Path與QueryString。

public class HelloWorldMiddleware
{
    // Fields
    private readonly RequestDelegate _next;

    // Constructors
    public HelloWorldMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // Methods
    public Task Invoke(HttpContext context)
    {
        // Request
        string path = context.Request.Path.ToString();
        string queryString = context.Request.QueryString.ToString();
        string message = string.Format("path={0}, queryString={1}", path, queryString);

        // Response
        context.Response.WriteAsync(message);

        // Return
        return Task.CompletedTask;
    }
}

同樣在實做Middleware.Invoke方法的時候,開發人員可以透過HttpContext.Response,來設定從「服務器回傳」的HTTP Response封包內容。在下列的范例程序代碼里,就是透過HttpContext.Response的WriteAsync方法、StatusCode屬性,來分別設定HTTP Response封包的Content與StatusCode。

public class HelloWorldMiddleware
{
    // Fields
    private readonly RequestDelegate _next;

    // Constructors
    public HelloWorldMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // Methods
    public Task Invoke(HttpContext context)
    {
        // Response
        context.Response.StatusCode = 404;
        context.Response.WriteAsync("Not Found");

        // Return
        return Task.CompletedTask;
    }
}

而在實做Middleware.Invoke方法的時候,如果程序代碼里發生了預期之外的Exception。ASP.NET Core預設會使用「500 Internal Server Error」,這個StatusCode來通報系統內部發生異常。 在下列的范例程序代碼里,就是直接拋出一個例外錯誤,交由ASP.NET Core的錯誤處理機制去處理。

public class HelloWorldMiddleware
{
    // Fields
    private readonly RequestDelegate _next;

    // Constructors
    public HelloWorldMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // Methods
    public Task Invoke(HttpContext context)
    {
        // Exception
        throw new Exception();

        // Return
        return Task.CompletedTask;
    }
}

建立Middleware的時候,開發人員可以透過建構子所傳入的RequestDelegate,來參考到Pipeline里的下一個Middleware。透過調用RequestDelegate,就可以調用Pipeline里的下一個Middleware的Invoke方法。在下列的范例程序代碼里,就是透過調用RequestDelegate,來調用Pipeline里的下一個Middleware的Invoke方法,藉此串接其他Middleware的程序邏輯。

public class HelloWorldMiddleware
{
    // Fields
    private readonly RequestDelegate _next;

    // Constructors
    public HelloWorldMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // Methods
    public async Task Invoke(HttpContext context)
    {
        // Do Something 01
        //....

        // Next
        await _next.Invoke(context);

        // Do Something 02
        // ...
    }
}

到此,相信大家對“ASP.NET Core的Middleware怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

改则县| 玛曲县| 达孜县| 辽阳县| 大石桥市| 宣武区| 班玛县| 平果县| 阿鲁科尔沁旗| 南丹县| 长白| 清流县| 云林县| 华安县| 台江县| 高尔夫| 襄汾县| 吉首市| 盐池县| 河西区| 香河县| 长子县| 临漳县| 桃园市| 新竹县| 阆中市| 广州市| 静安区| 襄垣县| 布尔津县| 盐边县| 牟定县| 辉县市| 乌拉特后旗| 抚松县| 古浪县| 林周县| 响水县| 凤山市| 鄂托克旗| 景洪市|