国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - ASP.NET Core3.X 終端中間件轉換為端點路由運行詳解

ASP.NET Core3.X 終端中間件轉換為端點路由運行詳解

2020-06-23 14:09馮輝 ASP.NET教程

這篇文章主要介紹了ASP.NET Core3.X 終端中間件轉換為端點路由運行,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

引言

前幾天.NET Core3.1發布,于是我把公司一個基礎通用系統升級了,同時刪除了幾個基礎模塊當然這幾個基礎模塊與.NET Core3.1無關,其中包括了支付模塊,升級完后靜文(同事)問我你把支付刪除了啊?我說是啊,沒考慮好怎么加上(感覺目前不太好,我需要重新設計一下)。

故事從這開始

考慮支付的時候我考慮的是將支付sdk如何直接引入到系統,以及可以有一系列支付的路由,我需要考慮的是如果創建響應給指定的地址,so我開始想如何達到我的目的自定義個中間件,Use、Run、Map???

路由的進階

路由負責將請求 URI 映射到終結點并向這些終結點調度傳入的請求。 路由在應用中定義,并在應用啟動時進行配置。 路由可以選擇從請求包含的 URL 中提取值,然后這些值便可用于處理請求。 通過使用應用中的路由信息,路由還能生成映射到終結點的 URL。

ASP.NET Core 2.1和更低版本中,路由是通過實現將IRouter傳入的URL映射到處理程序的接口來處理的。通常,將直接依賴MvcMiddleware添加到中間件管道末端的實現,而不是直接實現該接口。一旦請求到達MvcMiddleware,便會應用路由來確定傳入請求URL路徑所對應的控制器和操作。

然后,該請求在執行處理程序之前經過了各種MVC篩選器。這些過濾器形成了另一條“管道”,讓人聯想到中間件管道,并且在某些情況下必須復制某些中間件的行為。一個典型的例子就是CORS政策。為了對每個MVC操作以及中間件管道的其他“分支”實施不同的CORS策略,內部需要進行一定程度的重復。

“分支”中間件管道通常用于“偽路由”。如Map()在中間件管道中的擴展方法,將允許您在傳入路徑具有給定前綴時有條件地執行某些中間件。

如下所示:

?
1
2
3
4
5
app.Map("/order", app => app.Run(async context =>
  {
   await context.Response.WriteAsync("Order");
  })
 );

在這種情況下,該Run()方法是“終端”中間件,因為它返回響應。但是從某種意義上說,整個Map分支對應于應用程序的“端點”.

在ASP.NET Core 2.2中,引入了終結點路由作為MVC控制器的新路由機制。此實現本質上是的內部實現MvcMiddleware .

在ASP.NET Core 2.x中使用Map()

下面我們自定義一個中間件,該中間件返回直接返回一個相應而不是繼續往下執行調用_next委托,一個很基本的中間件。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class ApiEndpointMiddleware
{
 private readonly RequestDelegate _next;
 
 public ApiEndpointMiddleware(RequestDelegate next)
 {
  _next = next;
 }
 
 public async Task InvokeAsync(HttpContext context)
 {
  
  context.Response.StatusCode = 200;
 
  await context.Response.WriteAsync("Order");
 }
 
}

在ASP.NET Core 2.x中,可以通過使用擴展方法指定路由訪問該中間件,從而將其包含在Startup.cs的中間件管道中

?
1
2
3
4
5
6
7
8
public void Configure(IApplicationBuilder app)
{
 app.UseStaticFiles();
 
 app.Map("/order", app => app.UseMiddleware<ApiEndpointMiddleware>()); versionApp.UseMiddleware<VersionMiddleware>());
 
 app.UseMvcWithDefaultRoute();
}

當我們訪問 /order 或者 /order/1 路由都會得到自定義中間件返回的相應。

將中間件轉換為端點路由

在ASP.NET Core 3.0中,我們使用端點路由,因此路由步驟與端點的調用是分開的。實際上,這意味著我們有兩個中間件:

  • EndpointRoutingMiddleware 實際的路由,即計算將為指定的請求URL路徑調用哪個端點。
  • EndpointMiddleware 所有調用的端點。

它們在中間件管道中的兩個不同點處添加,因為它們起著兩個不同的作用。一般而言,我們想的是路由中間件提前在管道中,以便后續的中間件可以訪問有關將執行的端點的信息。端點的調用應在管道的末端進行。

如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  {
   if (env.IsDevelopment())
   {
    app.UseDeveloperExceptionPage();
   }
 
   app.UseHttpsRedirection();
 
   app.UseRouting();
 
   app.UseAuthorization();
 
   app.UseEndpoints(endpoints =>
   {
    endpoints.MapControllers();
   });
 
  }

該UseRouting()擴展方法添加EndpointRoutingMiddleware到管道,同時將UseEndpoints()擴展方法添加EndpointMiddleware到管道。UseEndpoints()實際上為應用程序注冊所有端點的位置。

那么如何將我們自定義中間件使用端點路由來映射呢?

從概念上講,我們UseEndpoints()使用/OrderURL作為匹配的路徑,將“order”端點的注冊移動到調用中:

?
1
2
3
endpoints.MapControllers();
  endpoints.Map("/order",endpoints.CreateApplicationBuilder()
  .UseMiddleware<ApiEndpointMiddleware>().Build()).WithDisplayName("order-api");

在我們上面針對ASP.NET Core 2.x的實現中,我們將匹配/order,/order/123等端點路由

例如:

?
1
endpoints.Map("/order/{action}",null);

這將同時匹配 /order /order/1,但不匹配/order/status/1。它比以前的版本功能強大得多.

在上一個示例中,我們提供了一個顯示名稱(主要用于調試目的),但是我們可以附加其他的信息,例如授權策略或CORS策略,其他中間件可以查詢這些信息。例如:

?
1
2
3
4
5
6
7
app.UseEndpoints(endpoints =>
 {
  endpoints.MapControllers();
  endpoints.Map("/order/{action}",endpoints.CreateApplicationBuilder()
  .UseMiddleware<ApiEndpointMiddleware>().Build()).WithDisplayName("order-api").RequireCors("AllowAllHosts")
 .RequireAuthorization("AdminOnly");
 });

我們向端點添加了CORS策略(AllowAllHosts)和授權策略(AdminOnly)。當到達端點的請求到達時,并在執行端點之前采取相應的措施。

參考

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-3.1#endpoint-routing-differences-from-earlier-versions-of-routing

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/yyfh/p/12010232.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 玖玖综合网 | 国产毛片毛片 | 日韩高清一区 | 99精品视频免费观看 | 国产一区二区三区视频在线观看 | 成人精品久久 | 久久久精品影院 | 黄色av免费 | 成人在线视频免费 | 国产精品高潮呻吟久久 | 玖玖色资源 | concern超碰在线 | 精品伊人久久 | 色吧一区 | 一级二级黄色大片 | 亚洲国产人午在线一二区 | 亚洲综合精品 | 成人免费毛片高清视频 | 成人日韩 | 久久久国产精品免费 | 91精品国产综合久久香蕉最新版 | 国产福利在线播放 | 中文字幕在线观看视频地址二 | 亚洲久草 | 亚洲免费在线看 | 欧美日韩国产不卡 | 在线a电影 | 永久免费av片在线观看全网站 | 久久蜜桃精品一区二区三区综合网 | 日韩精品一区二区三区在线观看 | 成人3d动漫一区二区三区91 | 激情综合五月天 | 99pao成人国产永久免费视频 | 亚洲特黄一级 | 国产精品久久久久久久久久久久 | 黄色免费观看网址 | 国产精品第十页 | 国产精品日本一区二区不卡视频 | 高清一区二区三区视频 | 国产精品久久久久久久久久久久久久 | 久久aⅴ国产欧美74aaa |