Mvc.Versioning正确的方式来建立路线

时间:2017-02-15 11:49:20

标签: c# asp.net-web-api asp.net-core versioning

我使用Microsoft.AspNetCore.Mvc.Versioning并且我很难正确设置路线。我是在关注Hanselman博客的信息:http://www.hanselman.com/blog/ASPNETCoreRESTfulWebAPIVersioningMadeEasy.aspx

我想通过URI访问我的API,如下所示:

http://me.com/api/v1/foo/bar

http://me.com/api/v1.0/foo/bar

我的foo类有正确的属性:

[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/[controller]")]

以上工作正常,但如果我输入以下(没有版本):

http://me.com/api/foo/bar

我在上面的时候得到404(我假设因为没有指定版本的路线设置不正确)。

我尝试将其添加到Startup.cs文件中:

//Add the versioning
services.AddApiVersioning(o => {
       //Everytime a new version is created this must be updated to default to the latest version.
       o.AssumeDefaultVersionWhenUnspecified = true;
       o.DefaultApiVersion = new ApiVersion(1, 0);
});

但是这也没有用 - 所以我然后将我想要的路线添加到我的foo类/控制器的顶部:

[Route("api/[controller]")]

这会获得我想要的行为,我可以访问以下所有路线:

http://me.com/api/v1/foo/bar

http://me.com/api/v1.0/foo/bar

http://me.com/api/foo/bar

这是应该做的吗?为什么不是Hanselman描述的默认版本?

1 个答案:

答案 0 :(得分:3)

请注意,Scott不建议使用URL路径分段方法来提供空白版本:

  

要清楚,你有完全的控制权,但外面的结果非常干净/ api / v [1 | 2 | 3] / helloworld

不支持在使​​用URL段映射时指定默认版本。有关详细信息,请参阅此Github issue