首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法要求在URL路径段中存在一个次要版本?

是否有一种方法要求在URL路径段中存在一个次要版本?
EN

Stack Overflow用户
提问于 2020-06-22 16:22:24
回答 1查看 360关注 0票数 1

我使用aspnet-api-versioning库来创建一个相当简单的版本控制策略,使用名称空间/文件夹来指定路由。我的启动代码如下所示:

代码语言:javascript
复制
services.AddApiVersioning(options =>
{
    options.AssumeDefaultVersionWhenUnspecified = true;
    options.ReportApiVersions = true;
    options.Conventions.Add(new VersionByNamespaceConvention());
});

我的控制器一般如下所示:

代码语言:javascript
复制
namespace Something.Api.V1_0.Controllers
{
    [ApiController]
    [Route("[controller]")]
    [Route("v{version:apiVersion}/[controller]")]
    public class MessageController : ControllerBase
    {
        [HttpGet]
        public IActionResult Get()
        {
            var formattedVersion = GetApiVersionString(HttpContext.GetRequestedApiVersion());
            var message = $"V1: It is Get in v1 controller (version {formattedVersion}).";

            return Ok(message);
        }

        [HttpGet]
        [Route("specific-route")]
        public IActionResult SpecificRoute()
        {
            var formattedVersion = GetApiVersionString(HttpContext.GetRequestedApiVersion());
            var message = $"V1: It is specific route (version {formattedVersion}).";

            return Ok(message);
        }
    }
}

不要关注GetApiVersionString(),它只是一个格式化版本字符串的私有方法。

此设置允许我将以下路由发送到此控制器的“特定路由”方法:

  • /Message/specific-route (这是为不知道versioning)
  • /v1/Message/specific-route的客户提供的(匹配1.0)
  • /v1.0/Message/specific-route

)

理想情况下,我想消除其中的第二个,并要求所有调用指定一个版本,指定一个主要和次要版本。换句话说,我希望对"v1“调用的响应与对任何未定义版本的调用相同。这个库提供了什么技术来完成这个任务吗?

注意:我所有的名称空间/文件夹都将遵循V_x格式,所以在我的方案中总是有一个次要版本可用。

EN

回答 1

Stack Overflow用户

发布于 2020-09-16 21:59:12

答案是-是的.而不是。

是的,可以强制格式化的API版本字符串值包含次要版本。使用version.ToString("VV")将以major.minor格式格式化版本。如果次要版本未指定,则假定为0。这也适用于比较,这意味着1 == 1.0

不,因为客户端可能不会指定次要的数字版本。虽然它可能对100%的显式很有用,但在按URL对客户端请求进行版本控制时,使它成为可选的可能更实用。但是,您可以完全自由地强制执行您的意愿,并生成在其中显式包含.0的URL。最终的净效果是一样的。

您还可以添加某种类型的中间件或其他东西,如果有一个API版本为次要版本生成null,则可以添加短路。

BTW:您仍然可以使用HttpContext.GetRequestedApiVersion(),但是模型绑定使这一点变得更容易了。您可以通过添加API版本参数来实现相同的目标。例如,public IActionResult Get(ApiVersion version).

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62519015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档