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 特性标记区域名称即可:
第二种方法在 mvc 中用的不多且通过使用默认的配置足矣, 在无法满足需求时可自定义路由规则, 一般 webapi 项目用的较多.
来源: http://www.bubuko.com/infodetail-3088837.html