url.link error: A route named 'Default' could not be found in the route collection. Parameter name: name
url.link error: A route named 'Default' could not be found in the route collection. Parameter name: name
我正在开发一个 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)
,您可以通过
等基于约定的路由构造 link
Url.Link("Default", new { controller = "Users", action = "Manage", id = aggregateId });
注意 common/lower 案例 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 路由映射的路由 table 中找不到 Default
路由名称的原因。您需要检查您的 WebApiConfig.cs
文件以获取您的 Web API.
的路由
所以你可能想要
Url.Link("DefaultApi", new { controller = "Users", action = "Manage", id = aggregateId });
对于 MVC 使用这个
Url.Action("inspsrc")
为我解决了同样的问题。
如果您的路由名称是 Default 或任何其他名称,请确保在名称 属性.
中指定它
示例:
[Route("{id:int}", Name="Default")]
public async Task<IHttpActionResult> Get(int id)
...
return CreatedAtRoute("Default",
new { id = x },
_mapper.Map<MyModel>(talk));
我正在开发一个 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 });
注意 common/lower 案例 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 路由映射的路由 table 中找不到 Default
路由名称的原因。您需要检查您的 WebApiConfig.cs
文件以获取您的 Web API.
所以你可能想要
Url.Link("DefaultApi", new { controller = "Users", action = "Manage", id = aggregateId });
对于 MVC 使用这个
Url.Action("inspsrc")
为我解决了同样的问题。
如果您的路由名称是 Default 或任何其他名称,请确保在名称 属性.
中指定它示例:
[Route("{id:int}", Name="Default")]
public async Task<IHttpActionResult> Get(int id)
...
return CreatedAtRoute("Default",
new { id = x },
_mapper.Map<MyModel>(talk));