使用 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")]
已解决问题。
在 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")]
已解决问题。