【问题标题】:Mvc.Versioning correct way to build routesMvc.Versioning 构建路由的正确方法
【发布时间】:2017-02-15 11:49:20
【问题描述】:

我正在使用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 描述的那样工作?

【问题讨论】:

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


    【解决方案1】:

    请注意,Scott 并不建议 URL 路径分段方法允许您提供空白版本:

    需要明确的是,您可以完全控制,但是使用 /api/v[1|2|3]/helloworld 从外部得到的结果非常干净

    不支持在使​​用 URL 段映射时指定默认版本。请参阅此Github issue 了解更多信息。

    【讨论】:

    • 即使在使用 ~/v/foo/bar 时,我似乎也得到了 404
    • 是的,这和我的问题一样,只是我从控制器中删除了[Route("api/[controller]")]
    • 那么'o.AssumeDefaultVersionWhenUnspecified = true;'实际上做了什么?折旧了吗?
    • 支持,但前提是您正在执行查询字符串或 HTTP 标头版本控制。
    • 啊,我没有意识到这一点。谢谢大卫,将最后一条信息添加到答案中,我将标记为正确:)
    猜你喜欢
    • 2022-06-28
    • 2013-08-04
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    相关资源
    最近更新 更多