我正在研究一个项目(通过使用.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}
现在我想通过使用路由#1来命中XYZ1
,并且链接(要动态创建要命中XYZ1
的链接)就像这个http://localhost:4321/H-R/UK/1234
。但是问题是,当我单击此链接时,它总是将我带到XYZ2
方法。我没有在控制器或操作方法级别上设置任何路由。请问有什么解决办法吗?
似乎,路线变得混乱。有两种方法可以解决此问题。1)在您的第一个路径中指定正则表达式,该表达式将说第一个参数将是固定字符串,如H-R2)在第二条路径中,指定正则表达式,该正则表达式将说第一个参数永远不会为H -R
第一
routes.MapRoute("HRDetail", "{ActionName}/{TName}/{MId}", new { controller = "ABC", action = "XYZ1" }, new{ActionName = "$your regularexpression to include only H-R$"});
OR
routes.MapRoute("CL", "{SName}/{CName}/{CId}", new { controller = "ABC", action = "XYZ2" }, new {SName = "$your regularexpression to exclude H-R$" });
PS:您需要花一些力气才能进行正则表达