我按照基于ASP.NET内核的REST版本控制指令在响应头中显示我的API版本。
这是我的配置代码
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddMvc().AddNewtonsoftJson();
services.AddMvc(opt =>
{
services.AddRouting(env => env.LowercaseUrls = true);
services.AddApiVersioning(opt => {
opt.ApiVersionReader = new MediaTypeApiVersionReader();
opt.AssumeDefaultVersionWhenUnspecified = true;
opt.ReportApiVersions = true;
opt.DefaultApiVersion = new ApiVersion(1, 0);
opt.ApiVersionSelector = new CurrentImplementationApiVersionSelector(opt);
});
}
这是我的控制器:
[Route("/")]
[ApiVersion("1.0")]
public class RootController:Controller
{
[HttpGet(Name =nameof(GetRoot))]
public IActionResult GetRoot()
{
var response = new { href = Url.Link(nameof(GetRoot),null) };
return Ok(response);
}
}
当我用postman测试我的API时,我得到了以下结果:
我不知道为什么opt.ReportApiVersions = true;
不工作。
发布于 2020-04-28 22:11:26
这样做的原因是为了从UI控制器中消除API控制器的歧义。在ASP.NET核心中,实际上没有任何其他内置的方法可以这样做,因为控制器就是控制器。
还有其他几种方法可以改变这种行为:
options.UseApiBehavior = false
,就像[ApiController]
之前的情况一样[ApiController]
)我希望这能帮上忙
发布于 2020-03-31 12:00:17
我找到了解决办法。我必须在我的控制器中添加[ApiController]
:
[Route("/")]
[ApiVersion("1.0")]
[ApiController]
public class RootController:Controller
{
[HttpGet(Name =nameof(GetRoot))]
public IActionResult GetRoot()
{
var response = new { href = Url.Link(nameof(GetRoot),null) };
return Ok(response);
}
}
https://stackoverflow.com/questions/60949746
复制相似问题