1. 程式人生 > >Asp.Net Core下的兩種路由配置方式

Asp.Net Core下的兩種路由配置方式

那是 .net 找到 apr html 成功 .net core strong url

與Asp.Net Mvc創建區域的時候會自動為你創建區域路由方式不同的是,Asp.Net Core下需要自己手動做一些配置,但更靈活了。

我們先創建一個區域,如下圖

技術分享圖片

然後我們啟動訪問/Manage/Home/Index 發現是404沒有找到該頁面,因為我們還沒有為其配置路由,下面使用兩種配置區域路由的方式

1、通過配置MapRoute

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: 
"{controller=Home}/{action=Index}/{id?}"); routes.MapRoute( name: "areas", template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); });

我們可以看到其中{area:exists}這個路由參數後面都有個:exists後綴,那麽這是用來幹什麽的呢?

:exists後綴可以保證不僅路由參數能從Url地址匹配到值,還要確保路由參數值在項目中能找到真正的文件夾或文件,整個路由才算匹配成功 。如果匹配失敗,Url地址會去匹配ASP.NET Core MVC中的其它路由。

更新詳細的路由匹配機制可以參看ASP.NET Core MVC的路由參數中:exists後綴有什麽作用,順便談談路由匹配機制

好了,已經配置好區域路由了。

我們再次訪問下/Manage/Home/Index

卻發現訪問的時候還是404沒有找到頁面

那是因為我們還少了最後一步,為控制器指定區域屬性 [Area(AreaName)]

技術分享圖片

OK,現在我們訪問/Manage/Home/Index

技術分享圖片

終於正常顯示出該頁面了。

那我們再優化一下這個搞個AreaBaseController,把[Area(Manage)]放到區域基類中去,這樣區域中的Controller統一繼承自該基類就可以了,非常方便

2、通過配置MapRouteRoute

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");

                routes.MapAreaRoute(
                    "AreasManage",
                    "Manage",
                    "Manage/{controller=Home}/{action=Index}/{id?}");
            });

在配置中直接指定區域名,這樣就不需要在區域控制器中指明區域名了,直接這裏配置好就訪問正常了

Asp.Net Core下的兩種路由配置方式