url.link 错误:在路由集合中找不到名为 'Default' 的路由。参数名称:名称



我正在研究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 });

注意controlleraction用于组成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")

为我解决了同样的问题

最新更新