我已按照此处所述实施了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来发现控制器?
答案 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;
} );
希望这会在将来对其他人有所帮助