Asp.net Core MVC(三)UseMvc設置路由

来源:https://www.cnblogs.com/xtt321/archive/2020/02/22/12343934.html
-Advertisement-
Play Games

在家辦公,下班繼續看點東西,不廢話,繼續看MVC的路由。 asp.net核心mvc的路由是建立在asp.net核心的路由之上的。通過終結點載入路由中間件的配置方式在此不細說了,(DOTNET Core MVC(二)已經說明)。在看一下其他的載入方式: app.UseMvc(routes => { / ...


在家辦公,下班繼續看點東西,不廢話,繼續看MVC的路由。

asp.net核心mvc的路由是建立在asp.net核心的路由之上的。通過終結點載入路由中間件的配置方式在此不細說了,(DOTNET Core MVC(二)已經說明)。在看一下其他的載入方式:

app.UseMvc(routes =>
{
  //使用指定的名稱和模板將路由添加到IRouteBuilder。
   routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});

這種方式在.net core 3.0(使用終結點載入路由中間件)中使用會提示

 

 

根據提示我們在代碼中添加:

ConfigureServices方法中添加:

//不啟用終結點
services.AddMvc(options => options.EnableEndpointRouting = false);
public static IApplicationBuilder UseMvc( this IApplicationBuilder app, Action<IRouteBuilder> configureRoutes
{
    if (app == null)
    {
        throw new ArgumentNullException(nameof(app));
    }
    if (configureRoutes == null)
    {
        throw new ArgumentNullException(nameof(configureRoutes));
    }
    //在調用UseMvc之前驗證AddMvc是否已完成
    VerifyMvcIsRegistered(app);
    var options = app.ApplicationServices.GetRequiredService<IOptions<MvcOptions>>();
    if (options.Value.EnableEndpointRouting)
    {
        var message =
            "Endpoint Routing does not support 'IApplicationBuilder.UseMvc(...)'. To use " +
            "'IApplicationBuilder.UseMvc' set 'MvcOptions.EnableEndpointRouting = false' inside " +
            "'ConfigureServices(...).";
        throw new InvalidOperationException(message);
    }
    //創建預設mvc處理類 
    //RouteBuilder為RouterMiddleware中間件創建所需的Router對象
    var routes = new RouteBuilder(app)
    {
        DefaultHandler = app.ApplicationServices.GetRequiredService<MvcRouteHandler>(),
    };
    //配置MVC路由的回調
    configureRoutes(routes);
    //CreateAttributeMegaRoute:返回一個IRouter 主要是用來處理 RouteAttribute 標記的Action,
    routes.Routes.Insert(0, AttributeRouting.CreateAttributeMegaRoute(app.ApplicationServices));
    //使用制定的路由將路由中間件田間到制applicationbuilder
    return app.UseRouter(routes.Build());
}
public interface IRouteBuilder
{
    //獲取applictionbuilder  (將中間件委托添加到應用程式的請求管道)
    IApplicationBuilder ApplicationBuilder { get; }
    //獲取路由(核心)
    IRouter DefaultHandler { get; set; }
    //獲取IServiceProvider用來解析路由服務的集合
    IServiceProvider ServiceProvider { get; }
    //獲取路由集合
    IList<IRouter> Routes { get; }
    IRouter Build();
}
//主要是用來處理 RouteAttribute 標記的Action,
public static IRouter CreateAttributeMegaRoute(IServiceProvider services)
{
    if (services == null)
    {
        throw new ArgumentNullException(nameof(services));
    }
    return new AttributeRoute(
        services.GetRequiredService<IActionDescriptorCollectionProvider>(),
        services,
        actions =>
        {
            var handler = services.GetRequiredService<MvcAttributeRouteHandler>();
            handler.Actions = actions;
            return handler;
        });
}

先寫道在這裡,雖然用到了它的方法過一遍,但還是對整個路由的流轉方式不是太清楚,所以我們下一篇將詳細說明以下路由的管道流轉過程。

 原創,轉載註明出處。  

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 網上大多數詞雲的代碼都是基於原始文本生成,這裡寫一個根據詞頻生成詞雲的小例子,都是基於現成的函數。 安裝詞雲與畫圖包 word_cloud.py(生成詞雲的程式) record.txt文件示例,第1列是單詞,第2列是頻率,空格分隔 運行後得到如下結果: ...
  • Pycharm分為商業版和社區版,商業版是收費的,社區版面向的是python社區的學習人員,其提供的功能與商業版並無太大區別。通常來說,使用社區版即可滿足絕大部分程式員的開發需求。 ...
  • 這裡是在阿裡雲伺服器的上部署 在本地測試好之後,打包,然後發到伺服器上的tomcat的webapp目錄上(這個可能會有個bug,先啟動下伺服器,然後關掉,再啟動,那個war包對應的文件才會出來) 這裡指的是第二個項目,也就是說本身有個項目已經在上面跑了,第二個也直接放到webapp文件夾下即可 然後 ...
  • 前言 本文包括內容如下: 杭州步行熱門路線 漸變效果散點圖 均是Echarts官方提供等示例,本文將會通過Pyecharts來進行實現。 杭州步行熱門路線 因為代碼中需要調用百度地圖,所以開始之前你需要去百度申請一個開發者AK: "百度地圖開放平臺" 。 數據源: "https://echarts. ...
  • 下載官方yaml文件 最新的配置文件v2.0.0 beta8版本recommended.yaml, "UI地址" 原文件: 修改為: 原文件內容 修改為: 下載鏡像和啟動 在master節點執行 執行 查看pod和service狀態 如果發現 kubernetes dashboard crashlo ...
  • 本文是根據慕課網Jason老師的課程進行的PHP面試知識點總結和升華,如有侵權請聯繫我進行刪除,email:[email protected] 在面試中,考官往往喜歡基礎扎實的面試者,而函數相關的考點,往往是大家容易忽視的一個點,今天冷月就來幫各位小伙伴們梳理一下,在面試中函數相關的註意點。 回顧真 ...
  • 封裝的Redis隊列 MyRedisQueue.py 接收端 發送端 ...
  • 1. 註釋註釋 是任何存在於 # 號右側的文字,其主要用作寫給程式讀者看的筆記。 2. 字面常量一個字面常量(Literal Constants)的例子是諸如 5、1.23 這樣的數字,或者是如 這是一串文本 或 This is a string 這樣的文本。 &每天都有程式員定時講解Python技 ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...