.NET Core 2.1迁移至.NET 6后请求匹配多端点问题
.NET 6路由冲突解决方法
你的问题是因为.NET 6调整了路由匹配逻辑,原来在.NET Core 2.1中能正常区分的路由,现在因为两个Action的路由模板都能匹配/content/game、/content/software这类请求,导致路由歧义。
给你两种可行的解决办法:
方法一:给Index1添加路由约束
直接用正则约束限定pageId只能是game或software,这样只有Index1会匹配这两个值,其他请求自动走Index2:
// 匹配/content/game 或 /content/software,默认请求/content时指向game [Route("/content/{pageId:regex(^game$|^software$)=game}")] public IActionResult Index1(string pageId, [FromQuery] int page=1) {} // 处理所有/content/*的其他请求 [Route("/content/{package}")] public IActionResult Index2(string package) {}
方法二:设置路由优先级
给Index1的路由设置更高的优先级(Order值越小优先级越高),让框架优先匹配Index1的路由,避免歧义:
// 优先匹配这两个路由 [Route("/content/{pageId=game}", Order = -1)] [Route("/content/{pageId=software}", Order = -1)] public IActionResult Index1(string pageId, [FromQuery] int page=1) {} // 处理剩余的/content/*请求 [Route("/content/{package}")] public IActionResult Index2(string package) {}
两种方法都能解决问题,推荐第一种,因为通过约束明确限定了匹配范围,逻辑更清晰。
内容的提问来源于stack exchange,提问作者Micle
相关产品推荐
相关产品推荐

