UrlHelper.动作方法没有映射到带有第一个变量参数的正确路由
本文关键字:参数 变量 路由 第一个 方法 UrlHelper 映射 | 更新日期: 2023-09-27 18:15:55
让我们看看RouteConfig.cs中映射的这两个路由,一个带guid,一个不带:
// Non-guid route
routes.MapPageRoute(
name: null,
url: "dashboard/{action}",
defaults: new { controller = "Dashboard", action = "Index" }
);
// Guid route
routes.MapPageRoute(
name: null,
url: "{guid}/dashboard/{action}",
defaults: new { controller = "Dashboard", action = "Index" }
);
和方法调用:
UrlHelper.Action("Index", "Dashboard", new { guid = "c73b47b9-4ad5-414a-a92e-8937231f8e2bD" })
方法返回:
"/dashboard/?guid=c73b47b9-4ad5-414a-a92e-8937231f8e2b"
但我期待这个:
"/c73b47b9-4ad5-414a-a92e-8937231f8e2b/dashboard/"
请注意,它将guid作为querystring值而不是第一个参数。
现在,如果我硬编码第二个url,应用程序使用正确的向导路由,也工作,如果我使用路由名称代替(UrlHelper.RouteUrl),所以我不认为这是一个问题与路由映射本身。这两种解决方案都不适用于我们的应用程序,因为我们有数百个路由,而且目前使用的是UrlHelper。到处都是行动
我也尝试了几乎所有的重载和UrlHelper的变化。操作,包括传递一个RouteValueDictionary而不是一个匿名对象。
这是一个ASP。. NET MVC 4 web应用程序。
你知道为什么这不起作用吗?
试试这个。把更具体的路由放在前面:
routes.MapRoute(
name: "WithGUID",
url: "{guid}/dashboard/{action}",
defaults: new { controller = "Dashboard", action = "Index" }
);
routes.MapRoute(
name: "NoGUID",
url: "dashboard/{action}",
defaults: new { controller = "Dashboard", action = "Index", guid = "" }
);