我正在考虑向我们现有的 API 添加版本控制。我们将版本嵌入到 URL 中。
版本控制的要求是应该很容易添加新版本,但并不是所有内容都会改变,我们不想在获得新版本时遍历所有控制器并添加新版本属性。有没有办法告诉 Microsoft.AspNetCore.Mvc.Versioning 无论版本如何,特定方法都应该可用?
我尝试使用 version:apiVersion 和基本路线来装饰我的方法。
[Route("v{version:apiVersion}/customers/{customerId}/estates/{estateId:int}/meters/{meterNumber}-{installationId}/consumption/detail")
[Route("customers/{customerId}/estates/{estateId:int}/meters/{meterNumber}-{installationId}/consumption/detail")]
Run Code Online (Sandbox Code Playgroud)
我的配置是这样的(版本号3仅用于测试目的):
services.AddApiVersioning(config =>
{
config.DefaultApiVersion = new ApiVersion(3, 0);
config.AssumeDefaultVersionWhenUnspecified = true;
config.ReportApiVersions = true;
});
Run Code Online (Sandbox Code Playgroud)
使用此配置调用端点时,我得到“与请求 URI 'http://{{host}}/api/customers/{customer}/estates/{estate}/meters/{meter}-{ 匹配的 HTTP 资源”不支持安装}/消费/详情'
一旦我添加 [ApiVersion("3.0")] 属性,一切都会正常。但我的想法是,如果我当前在版本 2 上运行,但对 API 其他部分的更改需要新版本和 API 的默认版本,我不想必须使用此控制器并“升级”版本。它应该继续响应,除非我指定特定的内容。
如果我将 AssumeDefaultVersionWhenUnspecified 更改为 false,我会收到“需要 API 版本,但未指定”。但我预计它只会抢没有版本的路线?
我在这里阅读了有关限制的信息:https://github.com/Microsoft/aspnet-api-versioning/wiki/Known-Limitations#url-path-segment-routing-with-a-default-api-version 但事实并非如此似乎不起作用。