我正在研究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 });
我使用这两种方法在标题中得到相同的错误。我该如何纠正?
答案 0 :(得分:2)
您的示例是混合属性路由和基于约定的路由。
假设ActionResult Manage(Guid id)
中的操作为UsersController
,您可以通过基于约定的路由构建链接,例如
Url.Link("Default", new { controller = "Users", action = "Manage", id = aggregateId });
请注意用于撰写网址的controller
和action
“路由值”的 常用/小写 名称
<强>更新强>
经过一番调查后,我还注意到你没有提到这是针对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));