url.link错误:名为'默认'在路线集合中找不到。参数名称:name

时间:2016-08-17 20:27:24

标签: 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 }
        );

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

[HttpGet]
[Route("manage/{id:guid}")]

致电Url.Link()

Url.Link("Default", new { Controller = "Users", Action = "Manage", id = aggregateId });

我尝试过命名该属性:

[HttpGet]
[Route("manage/{id:guid}", Name="ManageUserRoute")]

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

url = Url.Link("ManageUserRoute", new { id = aggregateId });

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

3 个答案:

答案 0 :(得分:2)

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

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

Url.Link("Default", new { controller = "Users", action = "Manage", id = aggregateId });

请注意用于撰写网址的controlleraction“路由值”的 常用/小写 名称

<强>更新

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

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

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

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

所以你可能想要

Url.Link("DefaultApi", new { controller = "Users", action = "Manage", id = aggregateId });

答案 1 :(得分:0)

对于MVC,请使用此

Url.Action("inspsrc")

为我解决了同样的问题。

答案 2 :(得分:0)

如果您的路线名称是默认或其他任何名称,请确保在“名称”属性中指定它。

示例:

       [Route("{id:int}", Name="Default")]
       public async Task<IHttpActionResult> Get(int id)

...
                      return CreatedAtRoute("Default",
                         new {  id = x },
                         _mapper.Map<MyModel>(talk));