Asp.Net Core下的两种路由配置方式
与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中使用默认MVC路由的配置
-
asp.net Core3.0区域与路由配置的方法
-
asp.net core中灵活的配置方式详解
-
Asp.Net Core下的两种路由配置方式
-
asp.net core webapi项目配置全局路由的方法示例
-
Asp.Net Core Linux环境下 找不到配置文件、静态文件的问题
-
linux系统下使用nginx反向代理asp.net core,并配置免费的https证书
-
ASP.NET Core中使用默认MVC路由的配置
-
ASP.NET Core MVC 中两种路由的简单配置
-
Asp.Net Core2.1前后使用HttpClient的两种方式