<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      Jackyfei

      在.NET 6.0中自定義接口路由

      大家好,我是張飛洪,感謝您的閱讀,我會不定期和你分享學習心得,希望我的文章能成為你成長路上的墊腳石,讓我們一起精進。

      在本文中,我們將討論ASP.NET Core中的新路由。我們將了解什么是接口(endpoints)路由,它是如何工作的,它在哪里使用,以及如何創建自己的路由。

      本文主題:

      • 探索接口路由
      • 創建自定義接口
      • 創建更復雜的接口

      名詞定義:端點,即我們訪問的接口或者叫API,有些地方叫EndPoint或者叫接口,其實源頭的稱呼應該叫端點會更貼切一些?;蛘吣阋部梢灾苯咏蠩ndPoint,但是先不管那么多,大概了解這個意思就可以了。

      探索接口路由

      要了解接口路由(End Point),您需要了解什么是端點以及什么是路由。

      端點是應用程序的一部分,當路由將傳入的請求映射到它時,端點就會被執行。

      客戶端通常從服務器請求資源。大多數情況下,客戶端是一個瀏覽器。資源由指向特定目標的URL定義。除了網頁,它也可以是一個移動應用程序,從Web API請求特定JSON數據。

      另一方面,執行的端點被映射到一個特定的路由,ASP.NET Core開發人員已經熟悉這樣一種路由模式:

      app.UseRouting(); 
      app.UseAuthorization(); 
      app.UseEndpoints(endpoints => {    
         endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); 
      });
      

      如果路由或路由模式與傳入請求的URL匹配,則請求將映射到該端點。
      ASP.NET Core可以映射到以下端點:

      • Controllers (例如, MVC or web APIs)
      • Razor Pages
      • SignalR (and Blazor Server)
      • gRPC services
      • Health checks
        大多數端點都有非常簡單的路由模式。只有MVC和Web API端點使用更復雜的模式。Razor頁面的路由定義基于實際頁面的文件夾和文件結構。

      在ASP.NET Core 2.2中引入端點之前,路由只是運用在MVC和Web API中。Razor Pages中的隱式路由是內置的,SignalR沒有路由一說。Blazor和gRPC在當時還不不知道在哪兒,健康檢查最初是作為中間件組件實現的。

      引入端點路由是為了將路由與實際端點分離,說得白話一點,就是讓URL地址和實際執行的Action進行分離,這會讓框架更加靈活,同時這意味著新的端點不需要實現自己的路由。

      創建自定義接口

      創建端點的最簡單方法是使用lambda:

      app.Map("/map", async context => {  
          await context.Response.WriteAsync("OK"); 
      });
      

      這里將/map路由映射到一個簡單的端點,該端點將單詞“OK”寫入響應流。

      關于早期.NET 6.0版本的說明
      .NET 6.0之前,該映射只能在Startup.cs文件中的UseEndpoints方法中,而使用.NET 6.0和新的Minimal API方法,可以在Program.cs文件中完成映射。

      另外,我們需要將Microsoft.AspNetCore.Http命名空間添加到using語句中。
      還可以將特定的HTTP方法(如GET、POST、PUT和DELETE)映射到端點。以下代碼顯示了如何映射GET和POST方法:

      app.MapGet("/mapget", async context => {     
          await context.Response.WriteAsync("Map GET"); 
      }); 
      app.MapPost("/mappost", async context => {  
              await context.Response.WriteAsync("Map POST");
      });
      
      

      我們還可以將兩個或多個HTTP方法映射到一個端點:

      app.MapMethods("/mapmethods",  new[] { "DELETE", "PUT" }, 
          async context => {
              await context.Response.WriteAsync("Map Methods");
      });
      

      這些端點映射很像我們在第8篇定制.NET 6.0的Middleware中間件中看到的基于lambda的中間件組件,這些管道中間件會返回結果,例如基于HTML的視圖、JSON結構化數據或類似的內容。但是,端點路由是一種更靈活的輸出方式,它應該會在ASP.NET Core 3.0以后的所有版本中進行使用。

      在第8篇中,我們看到我們可以像這樣的分支管道:

      app.Map("/map", mapped => {     // ……  });
      

      以上這種方式也會創建一個路由,但只會偵聽以/map開頭的URL。如果您希望有一個處理/map/{id:int?}等模式的路由引擎,來匹配/map/456而不是/map/abc,那么您應該使用前面所述的新的路由。

      而那些基于lambda的端點映射,對于簡單的場景非常有用。然而,由于它們是在Program.cs中定義的,如果您想使用這種方式來實現更復雜的場景,代碼維護性將變得很差。

      因此,我們應該嘗試找到一種更結構化的方法來創建自定義端點。

      創建更復雜的接口

      接下來,我們將創建一個健康檢查接口例子,有點類似于您在Kubernetes集群中運行應用程序時可能需要的接口,用來檢測系統的健康狀態:
      我們從開發者的角度定義API接口,我們首先添加一個MapMyHealthChecks方法,作為IEndpointRouteBuilder對象上的一個擴展方法,它沒有實現:

      app.MapMyHealthChecks("/myhealth");   
      app.MapControllerRoute(name: "default",pattern:"{controller=Home}/{action=Index}/{id?}");
      

      為了避免混淆,我們這兒采取和之前類似的方式添加新接口,后面我們進一步來實現一下。
      我們創建一個名為MapMyHealthChecksExtensions的靜態類,并在MapMyHealthCheck中放置一個擴展方法,該對象擴展IEndpointRouteBuilder接口并返回IEndpointConventionBuilder對象:

      namespace RoutingSample; 
      public static class MapMyHealthChecksExtensions {     
          public static IEndpointConventionBuilder  MapMyHealthChecks (this IEndpointRouteBuilder endpoints, string pattern = "/myhealth")     
          {         
              // ...     
          } 
      }
      

      以上只是骨架,實際的接口將被實現為一個終止的中間件,也就是說,它不調用下一個的中間件組件,并創建響應流的輸出:

      namespace RoutingSample; 
      public class MyHealthChecksMiddleware {     
          private readonly ILogger _logger;     
          public MyHealthChecksMiddleware (RequestDelegate next, ILogger logger)    
           {  
              _logger = logger;     
          }     
      
          public async Task Invoke(HttpContext context)     {         
              // add some checks here...         
              context.Response.StatusCode = 200;         
              context.Response.ContentType = "text/plain";         
              await context.Response.WriteAsync("OK");     
          } 
      }
      

      實際工作是在Invoke方法中完成的。目前,只演示200狀態碼和OK狀態響應,我們可以在這里隨意擴展該方法,例如檢查數據庫或相關服務的可用性。

      接下來我們使用這個終止中間件,我們回到MapMyHealthChecks方法的框架。我們現在創建一個自己的管道,并將其映射到給定的pipeline:

      var pipeline = endpoints.CreateApplicationBuilder().UseMiddleware().Build(); 
      return endpoints.Map(pattern, pipeline).WithDisplayName("My custom health checks");
      

      這種方法允許我們為這個新的管道添加更多的中間件。WithDisplayName擴展方法將配置的顯示名稱設置為接口,接下來按F5鍵啟動程序,并在瀏覽器中調用https://localhost:7111/myhealth。我們將看到:

      請注意,端口號可能會有所不同。我們還可以將已經存在的終止中間件組件轉換為路由接口,以配置更加靈活的路由。

      總結

      ASP.NET Core支持請求處理并向請求提供信息的多種方法。接口路由是一種基于URL和請求的方法提供資源。
      在本文,我們學習了如何使用終止中間件組件作為接口,并用將該接口映射到新的路由引擎,從而讓我們的路由變得更加強大和靈活。
      每個Web應用程序都需要了解系統用戶,以允許或限制對特定數據的訪問。在下一章中,我們將展示如何配置身份驗證和識別用戶。

      posted @ 2023-04-17 13:35  張飛洪[廈門]  閱讀(2699)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成全影视大全在线观看| 久久亚洲色www成人| 国产精品 第一页第二页| 日韩中文字幕v亚洲中文字幕| 国产精品白浆无码流出| 中国老太婆video| 午夜人成免费视频| 一区二区三区午夜无码视频| 青青国产揄拍视频| 成人无码区在线观看| 老鸭窝在钱视频| 热久在线免费观看视频| 亚洲 成人 无码 在线观看 | 白嫩日本少妇做爰| 国产亚洲精品福利在线无卡一 | 国产久爱免费精品视频| 亚洲精品中文字幕尤物综合| 精品偷拍一区二区三区| 国产日韩一区二区天美麻豆| 拍摄av现场失控高潮数次| 在国产线视频A在线视频| 人妻丝袜无码专区视频网站| 南靖县| 免费人成在线观看网站| 美女视频黄频大全视频| 久久99久国产麻精品66| 九九热在线免费视频播放| 亚洲精品乱码久久久久红杏| 91久久夜色精品国产网站| 四虎在线成人免费观看| 国产人成视频在线观看| 国产乱人伦真实精品视频| 国产偷国产偷亚洲清高| h无码精品动漫在线观看| 东方四虎在线观看av| 卢龙县| 久久亚洲色www成人| 99热久久这里只有精品| 亚洲综合av一区二区三区| 国产在线亚州精品内射| 国产中文字幕在线精品|