【问题标题】:MVC Core overriding routing breaks Url.RouteUrl helper method when using aspnet-api-versioning使用 aspnet-api-versioning 时,MVC Core 覆盖路由会中断 Url.RouteUrl 辅助方法
【发布时间】:2018-04-11 15:38:19
【问题描述】:

在 MVC Core Web 应用程序中,使用“~”覆盖控制器方法上的路由前缀似乎会破坏 Url.RouteUrl 辅助方法。它返回 null 而不是正确的路由。

例子:

[Route("v{api-version:apiVersion}/[controller]")]
public class BooksController : ApiController
{
    [HttpGet]
    [Route("{bookId}", Name = "GetBook")]
    public Book GetBook( int bookId )
    {
    }

    // GET /v1/authors/1/books
    [HttpGet]
    [Route("~/v{api - version:apiVersion}/authors/{authorId:int}/books")]
    public IEnumerable<Book> GetByAuthor(int authorId)
    {
        // do some stuff
        string route = Url.RouteUrl( "GetBook", new { id = 1 });
    }
}

我相信上面的例子会说明问题。从 Url.RouteUrl() 返回的路由为空。在不使用版本控制并从路由中删除“”的情况下,RouteUrl() 方法将正确地将 url 返回到 GetBook 方法。 它添加了导致问题的 aspnet-api-versioning nuget 包。

任何想法如何让 RouteUrl 在这种情况下工作?

【问题讨论】:

    标签: c# .net-core asp.net-core-mvc asp.net-mvc-routing


    【解决方案1】:

    好的,偶然发现了一个答案。不知道为什么这解决了问题,但改变路线:

    [Route("~/v{api - version:apiVersion}/authors/{authorId:int}/books")]

    到:

    [Route("~/v{version:apiVersion}/authors/{authorId:int}/books")]

    解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-03
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多