1.全局约定路由
这种方式配置优先级比较低,如果控制器或者方法上标记了特性路由那么优先走特性路由。
当建立好一个mvc项目里,路由都是默认配置好的。
如果建立的是空项目那么需要手动配置:
1.需要在ConfigureServices方法中添加mvc服务
services.AddMvc();
2.在Configure添加mvc中间件:
app.UseMvcWithDefaultRoute(); //添加mvc中间件并使用默认路由配置
这里添加mvc中间时使用的是默认的路由配置,默认的路由配置就是跟上图的一样。如果url地址栏controller为空那么默认为home,action为空那么默认为index方法,最后一个/id是可空的(带?代表可空的,正则约束)。当然也可以自定义一些路由:
app.UseMvc(builder => { builder.MapRoute("default", "{controller=Home}/{action=Index}/{Id?}"); //添加mvc中间件并使用自定义路由配置 builder.MapRoute("areas", "{area:exists}/{controller=Home}/{action=Index}/{Id?}"); //区域路由配置 });
这里区域路由配置中的 {area:exists} 这个exists不仅可以路由参数能从Url地址匹配到值还要确保路由参数值在项目中能找到真正的文件夹或文件,这样整个路由才算匹配成
2.特性标记路由
特性标记路由是使用Route特性标记在标记在控制器或者方法上的,Route必须传入一个参数,该参数为字符串
如图:
如果Route标记在控制器上,那么需要传入参数则为匹配的控制器名,
如果Route标记在控制器上,那么需要传入参数则为匹配方法名。
如果需要配置类似默认路由配置那样方法名为空就默认匹配某个方法时,则不在方法配置或者配置空字符串即可(注意:如果出现多个不配置或者配置空字符串时则无法匹配,出现异常):
如果想默认使用控制器名称和方法名称作为匹配规则可以这样来配置:
也可以直接在控制器上这样配置:
[Route("[Controller]/[Action]")]
区域配置,前面我们已经添加了区域路由配置。我们只需要添加区域然后添加控制器即可。在控制器上使用Area特性标记区域名称即可: