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应用程序。

你知道为什么这不起作用吗?

UrlHelper.动作方法没有映射到带有第一个变量参数的正确路由

试试这个。把更具体的路由放在前面:

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 = "" }
);