首页 > 解决方案 > ASP.Net Core MVC 路由问题

问题描述

我正在开发一个项目(使用 .Net Core 开发),我设置了一些路由,其中​​一个无法正常工作,例如

1) routes.MapRoute("HRDetail", "H-R/{TName}/{MId}", new { controller = "ABC", action = "XYZ1" });
2) routes.MapRoute("CL", "{SName}/{CName}/{CId}", new { controller = "ABC", action = "XYZ2" });

我在 Startup 类中按照相同的顺序编写了代码,我的操作方法如下。

public async Task<IActionResult> XYZ2(string SName, string CName, Int16 CId)
{//for route#2}
public async Task<IActionResult> XYZ1( string TName, Int64 MId)
{//for route#1}

现在我想XYZ1通过使用 route#1 和链接(点击XYZ1正在动态创建)是这样的http://localhost:4321/H-R/UK/1234。但问题是当我点击这个链接时,它总是带我去XYZ2方法。
我没有在控制器或操作方法级别上设置任何路由。
lz有什么解决办法吗?

标签: asp.net-mvcasp.net-coreroutingasp.net-core-mvc

解决方案


看来,路线变得混乱。有两种方法可以解决此问题。1)在您的第一条路线中指定正则表达式,它将说第一个参数将是一个固定字符串作为 HR 2)在您的第二条路线中指定正则表达式,它将说第一个参数永远不会是 HR

第一

routes.MapRoute("HRDetail", "{ActionName}/{TName}/{MId}", new { controller = "ABC", action = "XYZ1" }, new{ActionName = "$your regularexpression to include only H-R$"});

或者

routes.MapRoute("CL", "{SName}/{CName}/{CId}", new { controller = "ABC", action = "XYZ2" }, new {SName = "$your regularexpression to exclude H-R$" });

PS:你需要为正则表达式付出一些努力


推荐阅读