ASP.Net Core MVC路由问题

问题描述 投票:0回答:1

我正在研究一个项目(通过使用.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方法。我没有在控制器或操作方法级别上设置任何路由。请问有什么解决办法吗?

asp.net-mvc asp.net-core routing asp.net-core-mvc
1个回答
0
投票

似乎,路线变得混乱。有两种方法可以解决此问题。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:您需要花一些力气才能进行正则表达

© www.soinside.com 2019 - 2024. All rights reserved.