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

C# url.link错误:名为';默认值';在路由集合中找不到。参数名称:name,c#,asp.net-web-api,asp.net-web-api-routing,C#,Asp.net Web Api,Asp.net Web Api Routing,我正在开发一个MVC应用程序,并尝试使用Url.Link函数来构建一个工作Url 以下是一些相关代码: 在路由配置cs中 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "In

我正在开发一个MVC应用程序,并尝试使用
Url.Link
函数来构建一个工作Url

以下是一些相关代码:

路由配置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()

我已尝试将属性命名为:

[HttpGet]
[Route("manage/{id:guid}", Name="ManageUserRoute")]
然后像这样调用
Url.Link()

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

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

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


假设操作是
userscocontroller
中的
ActionResult Manage(Guid id)
,则可以通过基于约定的路由构造链接,如

Url.Link("Default", new { controller = "Users", action = "Manage", id = aggregateId });
注意用于组成URL的
控制器
操作
通用/小写名称

更新

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

因此,很可能是因为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 });
对于MVC,请使用以下命令

Url.Action("inspsrc")

为我解决了相同的问题。

如果您的路由名称为默认值,或任何其他名称,请确保在name属性中指定它

例如:

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

...
                      return CreatedAtRoute("Default",
                         new {  id = x },
                         _mapper.Map<MyModel>(talk));
[路由(“{id:int}”,Name=“Default”)]
公共异步任务Get(int-id)
...
返回CreatedAtRoute(“默认值”,
新的{id=x},
_mapper.Map(talk));

假设操作是
ActionResult Manage(Guid id)
UsersController
中,通过基于约定的路由(如
Url.link(“默认”,new{controller=“Users”,action=“Manage”,id=aggregateId})构建链接
。请注意
控制器
操作
的常见名称。您的示例混合了属性路由和基于约定的路由。我非常确定这正是他在代码块#3中已经尝试过的一件事。但是路由值不区分大小写吗?他也没有显示操作,因此我在代码截取之前假设了这一点pet.oh,你可能是对的,我现在明白你的意思了。你能更新你的答案,把路径中的小写字母C和A指得更清楚一点吗?我在代码片段之后就这么做了,注意控制器和操作的通用名称是否有一个MVC与我所做的相同?你说得对,这不是一个API方法。谢谢
       [Route("{id:int}", Name="Default")]
       public async Task<IHttpActionResult> Get(int id)

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