url.链接错误:名为'默认'无法在路由集合中找到.参数名称:名称
本文关键字:参数 名称 集合 名为 错误 链接 默认 url 路由 | 更新日期: 2023-09-27 18:02:54
我正在研究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 });
在标题中使用这两种方法得到相同的错误。我如何纠正这个问题?
你的例子混合了属性路由和基于约定的路由。
假设动作是UsersController
中的ActionResult Manage(Guid id)
,您可以通过像
Url.Link("Default", new { controller = "Users", action = "Manage", id = aggregateId });
注意controller
和action
用于组成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 });
如果你的路由名称是Default,或者其他任何名称,请确保在name属性中指定它。
的例子:
[Route("{id:int}", Name="Default")]
public async Task<IHttpActionResult> Get(int id)
...
return CreatedAtRoute("Default",
new { id = x },
_mapper.Map<MyModel>(talk));
对于MVC使用这个
Url.Action("inspsrc")
为我解决了同样的问题