亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

中間件是一種裝配到應用管道以處理請求和響應的軟件。 ASP.NET Core 提供了一組豐富的內置中間件組件,但在某些情況下,你可能需要寫入自定義中間件。

備注

本主題介紹如何編寫基于約定的中間件。 有關使用強類型和按請求激活的方法,請參閱 ASP.NET Core 中基于工廠的中間件激活。

中間件類

通常,中間件封裝在類中,并且通過擴展的方法公開。 請考慮以下中間件,該中間件通過查詢字符串設置當前請求的區域性:

 

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.Use(async (context, next) =>
        {
            var cultureQuery = context.Request.Query["culture"];
            if (!string.IsNullOrWhiteSpace(cultureQuery))
            {
                var culture = new CultureInfo(cultureQuery);

                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;
            }

            // Call the next delegate/middleware in the pipeline
            await next();
        });

        app.Run(async (context) =>
        {
            await context.Response.WriteAsync(
                $"Hello {CultureInfo.CurrentCulture.DisplayName}");
        });

    }
}

以上示例代碼用于演示創建中間件組件。 有關 ASP.NET Core 內置本地化支持,請參閱 ASP.NET Core 全球化和本地化。

通過傳入區域性測試中間件。 例如,請求 https://localhost:5001/?culture=no。

以下代碼將中間件委托移動到類似:

 

using Microsoft.AspNetCore.Http;
using System.Globalization;
using System.Threading.Tasks;

namespace Culture
{
    public class RequestCultureMiddleware
    {
        private readonly RequestDelegate _next;

        public RequestCultureMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task InvokeAsync(HttpContext context)
        {
            var cultureQuery = context.Request.Query["culture"];
            if (!string.IsNullOrWhiteSpace(cultureQuery))
            {
                var culture = new CultureInfo(cultureQuery);

                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;

            }

            // Call the next delegate/middleware in the pipeline
            await _next(context);
        }
    }
}

必須包括中間件類:

  • 具有類型為 RequestDelegate 的參數的公共構造函數。
  • 名為 Invoke 或 InvokeAsync 的公共方法。 此方法必須:返回 Task。接受類型 HttpContext 的第一個參數。

構造函數和 Invoke/InvokeAsync 其他參數由依賴關系注入 (DI) 填充。

中間件依賴項

中間件應通過在其構造函數中公開其依賴項來遵循顯式依賴項的原則。 在每個應用程序生存期構造一次中間件。 如果需要與請求中的中間件共享服務,請參閱按請求中間件依賴項部分。

中間件組件可通過構造函數參數從依賴關系注入 (DI) 解析其依賴項。 UseMiddleware<T> 也可直接接受其他參數。

按請求中間件依賴項

由于中間件是在應用啟動時構造的,而不是按請求構造的,因此在每個請求過程中,中間件構造函數使用的范圍內生存期服務不與其他依賴關系注入類型共享。 如果必須在中間件和其他類型之間共享范圍內服務,請將這些服務添加到 Invoke 方法的簽名。 Invoke 方法可接受由 DI 填充的其他參數:

 

public class CustomMiddleware
{
    private readonly RequestDelegate _next;

    public CustomMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // IMyScopedService is injected into Invoke
    public async Task Invoke(HttpContext httpContext, IMyScopedService svc)
    {
        svc.MyProperty = 1000;
        await _next(httpContext);
    }
}

生存期和注冊選項包含范圍內生存期服務的中間件的完整示例。

中間件擴展方法

以下擴展方法通過 IApplicationBuilder 公開中間件:

 

using Microsoft.AspNetCore.Builder;

namespace Culture
{
    public static class RequestCultureMiddlewareExtensions
    {
        public static IApplicationBuilder UseRequestCulture(
            this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<RequestCultureMiddleware>();
        }
    }
}

以下代碼通過 Startup.Configure 調用中間件:

 

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.UseRequestCulture();

        app.Run(async (context) =>
        {
            await context.Response.WriteAsync(
                $"Hello {CultureInfo.CurrentCulture.DisplayName}");
        });
    }
}

分享到:
標簽:中間件
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定