最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解ASP.NET Core端點(diǎn)路由的作用原理

 更新時(shí)間:2020年07月13日 11:13:17   作者:有態(tài)度的小碼甲  
這篇文章主要介紹了詳解ASP.NET Core端點(diǎn)路由的作用原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

端點(diǎn)路由(Endpoint Routing)最早出現(xiàn)在ASP.NET Core2.2,在ASP.NET Core3.0提升為一等公民。

Endpoint Routing的動(dòng)機(jī)

在端點(diǎn)路由出現(xiàn)之前,我們一般在請(qǐng)求處理管道的末尾,定義MVC中間件解析路由。這種方式意味著在處理管道中,MVC中間件之前的中間件將無(wú)法獲得路由信息。

路由信息對(duì)于某些中間件非常有用,比如CORS、認(rèn)證中間件(認(rèn)證過(guò)程可能會(huì)用到路由信息)。

同時(shí)端點(diǎn)路由提煉出端點(diǎn)概念,解耦路由匹配邏輯、請(qǐng)求分發(fā)。

Endpoint Routing中間件

由一對(duì)中間件組成:

UseRouting 將路由匹配添加到中間件管道。該中間件查看應(yīng)用程序中定義的端點(diǎn)集合,并根據(jù)請(qǐng)求選擇最佳匹配。UseEndpoints 將端點(diǎn)執(zhí)行添加到中間件管道。

MapGet、MapPost等方法將 處理邏輯連接到路由系統(tǒng);

其他方法將 ASP.NET Core框架特性連接到路由系統(tǒng)。

  • MapRazorPages for Razor Pages
  • MapControllers for controllers
  • MapHub< THub> for SignalR
  • MapGrpcService< TService> for gRPC

處于這對(duì)中間件上游的 中間件: 始終無(wú)法感知 Endpoint;
處于這對(duì)中間件之間的 中間件,將會(huì)感知到Endpoint,并有能力執(zhí)行附加處理邏輯;
UseEndpoint是一個(gè)終點(diǎn)中間件;
沒(méi)有匹配,則進(jìn)入U(xiǎn)seEndpoint之后的中間件。


放置在UseRoutingUseEndpoints之間的認(rèn)證授權(quán)中間件可以:
感知被匹配的端點(diǎn)信息;在調(diào)度到Endpoint之前,應(yīng)用授權(quán)策略。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
  if (env.IsDevelopment())
  {
    app.UseDeveloperExceptionPage();
  }

  // Matches request to an endpoint.
  app.UseRouting();

  // Endpoint aware middleware. 
  // Middleware can use metadata from the matched endpoint.
  app.UseAuthentication();
  app.UseAuthorization();

  // Execute the matched endpoint.
  app.UseEndpoints(endpoints =>
  {
    // Configure the Health Check endpoint and require an authorized user.
    endpoints.MapHealthChecks("/healthz").RequireAuthorization();

    // Configure another endpoint, no authorization requirements.
    endpoints.MapGet("/", async context =>
    {
      await context.Response.WriteAsync("Hello World!");
    });
  });
}

以上在/health定義了健康檢查,該端點(diǎn)定義了IAuthorizeDatametadata,要求先認(rèn)證再執(zhí)行健康檢查。

我們?cè)赨seRouting、UseEndpoints之間添加一點(diǎn)口水代碼:感知端點(diǎn):

  app.Use(next => context =>
      {
        var endpoint = context.GetEndpoint();
        if (endpoint is null)
        {
          return Task.CompletedTask;
        }
        Console.WriteLine($"Endpoint: {endpoint.DisplayName}");

        if (endpoint is RouteEndpoint routeEndpoint)
        {
          Console.WriteLine("Endpoint has route pattern: " +
            routeEndpoint.RoutePattern.RawText);
        }

        foreach (var metadata in endpoint.Metadata)
        {
          Console.WriteLine($"Endpoint has metadata: {metadata}");
        }
        return next(context);
      });

當(dāng)請(qǐng)求/healthz時(shí),感知到AuthorizeAttribute metadata

故猜想認(rèn)證授權(quán)中間件要對(duì)/healthz起作用,必然會(huì)對(duì)這個(gè) AuthorizeAttribute metadata有所反應(yīng)。

于是翻閱GithubAuthorizationMiddleware3.0源碼:發(fā)現(xiàn)確實(shí)關(guān)注了Endpoint

// ---- 截取自https://github.com/dotnet/aspnetcore/blob/master/src/Security/Authorization/Policy/src/AuthorizationMiddleware.cs-----
if (endpoint != null)
{
  context.Items[AuthorizationMiddlewareInvokedWithEndpointKey] = AuthorizationMiddlewareWithEndpointInvokedValue;
}
var authorizeData = endpoint?.Metadata.GetOrderedMetadata<IAuthorizeData>() ?? Array.Empty<IAuthorizeData>();
var policy = await AuthorizationPolicy.CombineAsync(_policyProvider, authorizeData);
if (policy == null)
{
   await _next(context);
   return;
}
var policyEvaluator = context.RequestServices.GetRequiredService<IPolicyEvaluator>();
......

AuthorizeAttribute確實(shí)是實(shí)現(xiàn)了IAuthorizeData接口。

binggo, 猜想得到源碼驗(yàn)證。

結(jié)論

端點(diǎn)路由:允許ASP.NET Core應(yīng)用程序在中間件管道的早期確定要調(diào)度的端點(diǎn),
以便后續(xù)中間件可以使用該信息來(lái)提供當(dāng)前管道配置無(wú)法提供的功能。

這使ASP.NET Core框架更加靈活,強(qiáng)化端點(diǎn)概念,它使路由匹配和解析功能與終結(jié)點(diǎn)分發(fā)功能脫鉤。

https://github.com/dotnet/aspnetcore/blob/master/src/Security/Authorization/Policy/src/AuthorizationMiddleware.cs

到此這篇關(guān)于詳解ASP.NET Core端點(diǎn)路由的作用原理的文章就介紹到這了,更多相關(guān)ASP.NET Core端點(diǎn)路由內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Metalama使用Fabric操作項(xiàng)目或命名空間的問(wèn)題

    關(guān)于Metalama使用Fabric操作項(xiàng)目或命名空間的問(wèn)題

    Metalama是一個(gè)基于微軟編譯器Roslyn的元編程的庫(kù),可以解決我在開(kāi)發(fā)中遇到的重復(fù)代碼的問(wèn)題,這篇文章主要介紹了Metalama使用Fabric操作項(xiàng)目或命名空間,需要的朋友可以參考下
    2022-04-04
  • 理解ASP.NET?Core?錯(cuò)誤處理機(jī)制(Handle?Errors)

    理解ASP.NET?Core?錯(cuò)誤處理機(jī)制(Handle?Errors)

    這篇文章主要介紹了理解ASP.NET?Core?錯(cuò)誤處理(Handle?Errors)?,在這里需要注意的是,與“異常處理”有關(guān)的中間件,一定要盡早添加,這樣,它可以最大限度的捕獲后續(xù)中間件拋出的未處理異常。感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • asp.net獲取HTML表單File中的路徑的方法

    asp.net獲取HTML表單File中的路徑的方法

    這篇文章主要介紹了asp.net怎么獲取HTML表單File中的路徑,需要的朋友可以參考下
    2014-02-02
  • asp.net 上傳大文件解決方案

    asp.net 上傳大文件解決方案

    asp.net 上傳大文件解決方案...
    2007-04-04
  • asp.net mvc core管道及攔截器的理解

    asp.net mvc core管道及攔截器的理解

    這篇文章主要給大家介紹了關(guān)于asp.net mvc core管道及攔截器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用asp.net mvc core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • .Net Core讀取Json配置文件的實(shí)現(xiàn)示例

    .Net Core讀取Json配置文件的實(shí)現(xiàn)示例

    這篇文章主要介紹了.Net Core讀取Json配置文件的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Visual Studio 2013如何使XML文件轉(zhuǎn)換成類

    Visual Studio 2013如何使XML文件轉(zhuǎn)換成類

    Visual Studio 2013如何使XML文件轉(zhuǎn)換成類?這篇文章主要介紹了Visual Studio2013輕松將你的XML文件轉(zhuǎn)換成類的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • ASP.NET Core Zero使用Power Tool工具

    ASP.NET Core Zero使用Power Tool工具

    這篇文章介紹了ASP.NET Core Zero使用Power Tool工具的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • Web.config(應(yīng)用程序的配置信息)總結(jié)

    Web.config(應(yīng)用程序的配置信息)總結(jié)

    Web.config文件是一個(gè)XML文本文件,它用來(lái)儲(chǔ)存 ASP.NET Web 應(yīng)用程序的配置信息(如最常用的設(shè)置ASP.NET Web 應(yīng)用程序的身份驗(yàn)證方式),它可以出現(xiàn)在應(yīng)用程序的每一個(gè)目錄中,接下來(lái)詳細(xì)介紹一下配置情況,感興趣的朋友可以了解下
    2013-01-01
  • ASP.NET Core文件壓縮常見(jiàn)使用誤區(qū)(最佳實(shí)踐)

    ASP.NET Core文件壓縮常見(jiàn)使用誤區(qū)(最佳實(shí)踐)

    本文給大家分享ASP.NET Core文件壓縮常見(jiàn)的三種誤區(qū),就每種誤區(qū)給大家講解的非常詳細(xì),是項(xiàng)目實(shí)踐的最佳紀(jì)錄,對(duì)ASP.NET Core文件壓縮相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-05-05

最新評(píng)論

湄潭县| 翁牛特旗| 桃源县| 乌兰县| 英超| 台江县| 菏泽市| 高雄县| 越西县| 勃利县| 开江县| 固阳县| 灵宝市| 红河县| 滦南县| 上高县| 南川市| 泸水县| 定兴县| 屯留县| 滦南县| 眉山市| 崇阳县| 元阳县| 襄城县| 丹棱县| 洛宁县| 凤凰县| 贵德县| 西宁市| 山丹县| 云南省| 贺州市| 兴山县| 蒙城县| 正蓝旗| 武清区| 花莲市| 于都县| 台州市| 桃园县|