【发布时间】:2021-01-18 12:40:42
【问题描述】:
我正在使用 Microsoft.AspNetCore.Mvc.Versioning (v4.1) 提供的 API 版本控制方法。 所以在启动类中我有以下内容:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddMvc(options => options.Filters.Add<ExceptionFilter>());
services.AddApiVersioning(options =>
{
options.ApiVersionReader = new MyCustomVersionReader(configuration);
options.AssumeDefaultVersionWhenUnspecified = false;
options.ReportApiVersions = true;
options.ApiVersionSelector = new CurrentImplementationApiVersionSelector(options);
});
}
然后我可以在控制器中添加注释 [ApiVersion("1.0")] 到控制器或单个方法。
[HttpGet]
[ApiVersion("1.0")]
public async Task<IActionResult> Get() {...}
使用这个,所有对 api 的调用都必须在请求标头中包含版本信息。
但是,控制器中的特定方法是否可能不需要版本?
例如
[HttpGet]
[ApiVersion("1.0")]
public async Task<IActionResult> Method1() {...} //requires version in header
[HttpGet]
public async Task<IActionResult> Method2() {...} //does not require version in header
当我尝试上述方法时(省略 Method2 的 ApiVersion 注释),我仍然收到以下错误:
'需要 API 版本,但未指定。'
感谢您的帮助!
【问题讨论】:
-
在
AddApiVersioning定义中设置options.DefaultApiVersion = new ApiVersion(1, 0);。 -
这是否意味着版本控制变得可选?这个想法是有一个版本信息是强制性的方法,以及一个不需要版本控制的方法。
-
它将版本控制添加到所有操作。如果未在(操作或控制器)上定义属性,则版本将被视为默认为 1.0。如果指定,则将使用指定的属性值。
-
不需要版本意味着我们可以将其版本理解为任何值的默认值(实际上没有意义)。所以在这种情况下,我认为使用默认版本的
1.0很好。但是,可能还有其他方法可以通过使用版本控制扩展包来处理。我还没用过所以不确定。
标签: c# asp.net-core