【问题标题】:I cant show the API versions in response header with ApiVersioning .net Core我无法使用 ApiVersioning .net Core 在响应标头中显示 API 版本
【发布时间】:2020-07-11 22:55:12
【问题描述】:

我按照指令 REST API versioning with ASP.NET Core 在响应标头中显示我的 API 版本。

这是我的配置代码:

 public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddMvc().AddNewtonsoftJson();
        services.AddMvc(opt =>
        {

        services.AddRouting(env => env.LowercaseUrls = true);
        services.AddApiVersioning(opt => {
            opt.ApiVersionReader = new MediaTypeApiVersionReader();
            opt.AssumeDefaultVersionWhenUnspecified = true;
            opt.ReportApiVersions = true;
            opt.DefaultApiVersion = new ApiVersion(1, 0);
            opt.ApiVersionSelector = new CurrentImplementationApiVersionSelector(opt);
        });
    }

这是我的控制器:

[Route("/")]
[ApiVersion("1.0")]
public class RootController:Controller
{
    [HttpGet(Name =nameof(GetRoot))]
    public IActionResult GetRoot()
    {
        var response = new { href = Url.Link(nameof(GetRoot),null) };
        return Ok(response);
    }
}

当我用邮递员测试我的 API 时,我得到了这个结果:

我不知道为什么opt.ReportApiVersions = true; 不起作用。

【问题讨论】:

    标签: api asp.net-core api-versioning aspnet-api-versioning


    【解决方案1】:

    我找到了解决方案。我必须将[ApiController] 添加到我的控制器:

    [Route("/")]
    [ApiVersion("1.0")]
    [ApiController]
    public class RootController:Controller
    {
        [HttpGet(Name =nameof(GetRoot))]
        public IActionResult GetRoot()
        {
            var response = new { href = Url.Link(nameof(GetRoot),null) };
            return Ok(response);
        }
    }
    

    【讨论】:

      【解决方案2】:

      为什么它这样做的原因是为了区分 API 控制器和 UI 控制器。在 ASP.NET Core 中,实际上没有任何其他内置方法可以这样做 - 控制器就是控制器。

      还有其他几种方法可以改变这种行为:

      • 使用options.UseApiBehavior = false 退出,就像[ApiController] 之前的情况一样
      • 添加一个自定义的 IApiControllerSpecification 来标识一个 API 控制器(有一个可以理解 [ApiController] 的内置实现)
      • 替换默认的 IApiControllerFilter 服务,它实际上只是所有已注册 IApiControllerSpecification 实现的聚合

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2020-01-20
        • 1970-01-01
        • 2017-07-10
        • 1970-01-01
        • 2018-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多