Top*_*000 2 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 }
);
Run Code Online (Sandbox Code Playgroud)
我试图在控制器中到达的路线(函数的名称是 Manage - 它接受一个名为 id 的参数,该参数的类型为 guid:
[HttpGet]
[Route("manage/{id:guid}")]
Run Code Online (Sandbox Code Playgroud)
致电Url.Link():
Url.Link("Default", new { Controller = "Users", Action = "Manage", id = aggregateId });
Run Code Online (Sandbox Code Playgroud)
我尝试将属性命名为:
[HttpGet]
[Route("manage/{id:guid}", Name="ManageUserRoute")]
Run Code Online (Sandbox Code Playgroud)
然后Url.Link()像这样调用:
url = Url.Link("ManageUserRoute", new { id = aggregateId });
Run Code Online (Sandbox Code Playgroud)
使用这两种方法我在标题中得到相同的错误。我该如何纠正?
您的示例混合了属性路由和基于约定的路由。
假设操作 ActionResult Manage(Guid id)在 中UsersController,您可以通过基于约定的路由构建链接,例如
Url.Link("Default", new { controller = "Users", action = "Manage", id = aggregateId });
Run Code Online (Sandbox Code Playgroud)
注意用于组成 URL的通用/小写名称controller和action“路由值”
更新
经过一番调查,我还注意到您没有提到这是针对 Web API 而不是 MVC。线索是LinkMVC 版本中没有方法UrlHelper。
因此,您很可能会收到该错误,因为 Web api 的默认基于约定的路由DefaultAPi不是Default
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
这就是为什么它Default在 http 路由映射的路由表中找不到路由名称的原因。您需要检查WebApiConfig.cs文件中的 Web API 路由。
所以你可能想要
Url.Link("DefaultApi", new { controller = "Users", action = "Manage", id = aggregateId });
Run Code Online (Sandbox Code Playgroud)