在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版本的nuget包,它以某种方式引起了问题。
如何让RouteUrl在这个实例中工作?
答案 0 :(得分:0)
好的,偶然发现了答案。不知道为什么这解决了问题,但改变了路线:
[路线(“〜/ v {api - version:apiVersion} / authors / {authorId:int} / books”)]
为:
〔路线( “〜/ V {版本:apiVersion} /作者/ {AUTHORID:整数} /书籍”)]
修复了问题。