昨天遇到一个项目问题,新建的.NET core矿建在新建区域的MVC页面里面,无法通过路由找到页面。然后在网络上查询很多资料,发现都是千古文章一大抄,而且都是错误的。
后面又添加了3个专业技术群,同样,没有人知道这个问题,官网也找了,确实由于自己不熟悉,没找到有用的。后来网上找个个大神,大神帮我远程搞懂了这个东西。在此,
特别感谢广州的jalan QQ86167612。
在这里特别区分一下.net core的不同版本的路由。
.NET CORE 2.0版本Startup文件路由配置:
app.UseMvc(routes => { routes.MapRoute( name: "areas", template: "{area:exists}/{controller=Home}/{action=Index}/{id?}" ); routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });
上面的方式是为区域添加路由,下面的是默认路由。
不过值得注意的是,.NET CORE 3.0以上版本已经不再支持这种路由配置方式了,而是通过终节点方式配置的。我的.net core 版本为3.1.2,亲测有效。Startup文件配置如下。
大家注意到,有两种方式,不过,首先说第一种:在项目中指定任意域。name后面的名字可以任意取,exists的意思就是根据实际的域来区分路由,也就是如果这样配置,则只需要写一个,以后无论加多少域,都可以自动识别路由。
endpoints.MapControllerRoute( name: "myArea", pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
还有一种方式 就是通过指定特定的域。这种方式的缺点就是,每次新增域,都要新增这样一个注册。
endpoints.MapAreaControllerRoute( name: "areas", "BaseManage", pattern: "{area:exists}/{controller=User}/{action=Index}/{id?}");
具体的区分一定要看官方说明:https://docs.microsoft.com/zh-cn/aspnet/core/mvc/controllers/areas?view=aspnetcore-3.1
然后,贴上我的项目结构
控制器代码,这里的Area一定以及写上哈。里面填写你的区域名称
StartUp配置代码上面以及发图了哈。之后发一个域的页面链接图。
最后希望大家写博客的时候最好是自己亲自测试一下,不要到处抄写,结果全是错的。别人借鉴的时候云里雾里。
再次感谢jalan,并希望这篇文章能对同样问题的你有帮助。