C# url.link错误:名为';默认值';在路由集合中找不到。参数名称:name
我正在开发一个MVC应用程序,并尝试使用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
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));