【问题标题】:ASP.Net Core MVC Routing IssueASP.Net Core MVC 路由问题
【发布时间】:2020-03-02 13:04:17
【问题描述】:

我正在开发一个项目(使用 .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}

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

【问题讨论】:

  • 我在asp.net core 2.2中测试没有任何问题。你能不能新建一个mvc项目再测试一下?能不能展示你完整的startup.cs?
  • @XingZou 首先感谢您的努力。我从 1 个月开始就一直在做这个项目,这些路线工作正常,但突然它开始表现异常......所以,为了解决这个问题,我只是为此目的创建了一个新控制器,并且它工作正常同样的路线...再次感谢亲爱的...

标签: asp.net-mvc asp.net-core routing asp.net-core-mvc


【解决方案1】:

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

第一个

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:你需要为正则表达式付出一些努力

【讨论】:

    猜你喜欢
    • 2018-08-11
    • 1970-01-01
    • 2021-05-04
    • 2013-11-13
    • 2011-11-30
    • 2013-06-07
    相关资源
    最近更新 更多