没有APIController属性的版本化API Explorer

时间:2019-04-18 13:58:54

标签: c# asp.net-core

我已按照此处所述实施了aspnet core api versioning

这是一些示例代码

 services.AddApiVersioning(
                options =>
                {
                    options.ReportApiVersions = true;
                    options.DefaultApiVersion = new ApiVersion(0,0);
                    options.AssumeDefaultVersionWhenUnspecified = true;
                } );

services.AddVersionedApiExplorer(
                options =>
                {
                    // note: the specified format code will format the version as "'v'major[.minor][-status]"
                    options.GroupNameFormat = "'v'VVV";
                    options.SubstituteApiVersionInUrl = true;
                } );

示例控制器:

    [Route("api/v{version:apiVersion}/[controller]")]
    [ApiVersion("1")]
    public class BreadcrumbsController : BaseController
    {
...code removed...
    }

如果我将[ApiController]属性添加到控制器,则一切正常,但是如果删除它,则IApiVersionDescriptionProvider不返回任何结果。 VersionApiExplorer似乎找不到控制器。不幸的是,添加[ApiController]属性会覆盖我们已经实现的某些过滤器,因此我不想将其添加到控制器中。

如何在不添加ApiController属性的情况下获取Versioned API Explorer来发现控制器?

1 个答案:

答案 0 :(得分:0)

深入了解,我在发布文档https://github.com/Microsoft/aspnet-api-versioning/releases中找到了

  
      
  • ApiVersioningOptions.UseApiBehavior现在默认为true

         
        
    • 如果未应用[ApiController],这可能会导致您的API控制器被排除在外
    •   
    • 如果您的API控制器使用基于约定的路由,则肯定会排除它们,因为无法应用[ApiController]
    •   
  •   

阅读后,我添加了建议的UseApiBehavior = false(默认为true,这是一个重大更改),并且现在可以正常运行

 services.AddApiVersioning(
                options =>
                {
                    options.ReportApiVersions = true;
                    options.DefaultApiVersion = new ApiVersion(0,0);
                    options.AssumeDefaultVersionWhenUnspecified = true;
                    options.UseApiBehavior = false;
                } );

希望这会在将来对其他人有所帮助