我正在使用 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);
});
}
在 Controller 中,我可以将注释 [ApiVersion("1.0")] 添加到 Controller 或单个方法。
[HttpGet]
[ApiVersion("1.0")]
public async Task<IActionResult> Get() {...}
使用此功能,对 api 的所有调用都必须在请求 header 中包含版本信息。
但是,是否可以在 Controller 中使用不需要版本的特定方法?
例如
[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 版本,但未指定。”
感谢您的帮助!
最佳答案
我认为您可以使用[ApiVersionNeutral]
属性。您可以在下面看到我的演示。
首先在启动中添加:
options.Conventions.Controller<HomeV1Controller>().HasApiVersion(new Microsoft.AspNetCore.Mvc.ApiVersion(1, 0));
然后在您的HomeV1Controller
中:
[Route("api/[controller]")]
[ApiController]
public class HomeV1Controller : ControllerBase
{
[HttpGet("get")]
public string Get() => "Ok1";
[HttpGet("getv2")]
[ApiVersionNeutral]
public string GetV2() => "Ok2";
}
关于c# - 是否可以对 ASP.NET Core Controller 中的特定方法使用 API 版本控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65774716/