url.link 错误:在路由集合中找不到名为“默认”的路由。参数名称:名称

Top*_*000 2 c# asp.net-web-api asp.net-web-api-routing

我正在开发一个 MVC 应用程序并尝试使用该Url.Link函数来构建一个有效的 url。

这是一些相关的代码:

RouteConfig.cs

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
Run Code Online (Sandbox Code Playgroud)

我试图在控制器中到达的路线(函数的名称是 Manage - 它接受一个名为 id 的参数,该参数的类型为 guid:

[HttpGet]
[Route("manage/{id:guid}")]
Run Code Online (Sandbox Code Playgroud)

致电Url.Link()

Url.Link("Default", new { Controller = "Users", Action = "Manage", id = aggregateId });
Run Code Online (Sandbox Code Playgroud)

我尝试将属性命名为:

[HttpGet]
[Route("manage/{id:guid}", Name="ManageUserRoute")]
Run Code Online (Sandbox Code Playgroud)

然后Url.Link()像这样调用:

url = Url.Link("ManageUserRoute", new { id = aggregateId });
Run Code Online (Sandbox Code Playgroud)

使用这两种方法我在标题中得到相同的错误。我该如何纠正?

Nko*_*osi 5

您的示例混合了属性路由和基于约定的路由。

假设操作 ActionResult Manage(Guid id)在 中UsersController,您可以通过基于约定的路由构建链接,例如

Url.Link("Default", new { controller = "Users", action = "Manage", id = aggregateId });
Run Code Online (Sandbox Code Playgroud)

注意用于组成 URL的通用/小写名称controlleraction“路由值”

更新

经过一番调查,我还注意到您没有提到这是针对 Web API 而不是 MVC。线索是LinkMVC 版本中没有方法UrlHelper

因此,您很可能会收到该错误,因为 Web api 的默认基于约定的路由DefaultAPi不是Default

// Convention-based routing.
config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)

这就是为什么它Default在 http 路由映射的路由表中找不到路由名称的原因。您需要检查WebApiConfig.cs文件中的 Web API 路由。

所以你可能想要

Url.Link("DefaultApi", new { controller = "Users", action = "Manage", id = aggregateId });
Run Code Online (Sandbox Code Playgroud)