使用 aspnet-api-versioning 时,MVC Core 重写路由会中断 Url.RouteUrl 辅助方法

MVC Core overriding routing breaks Url.RouteUrl helper method when using aspnet-api-versioning

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

示例:

[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() 编辑的路由 return 为空。在不使用版本控制并从路由中删除“”的情况下,RouteUrl() 方法将正确地 return url 到 GetBook 方法。 它添加了以某种方式导致问题的 aspnet-api-versioning nuget 包。

对于如何让 RouteUrl 在这种情况下工作有什么想法吗?

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

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

至:

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

已解决问题。