下面是使用NuGet的版本。
PackageReference Include =“ Microsoft.AspNetCore.Mvc.Versioning”版本=“ 2.3.0” PackageReferenceInclude =“ Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer”版本=“ 2.2.0” PackageReference Include =“ Swashbuckle.AspNetCore”版本=“ 3.0.0”
startup.cs
services.AddApiVersioning(o =>
{
o.ReportApiVersions = true;
o.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(1, 0);
o.AssumeDefaultVersionWhenUnspecified = true;
o.ErrorResponses = new DefaultErrorResponseProvider();
});
DemoTestController.cs
[ApiVersion("2.0")]
[ApiController]
[Route("api/v{version:apiVersion}/[Controller]")]
public class DemoTest : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return new JsonResult(new { ResourceName = "DemoTestAPIController Version 2" });
}
}
对于上述控制器
http://localhost:53858/api/v2.0/DemoTest(此URL有效,其响应应为200,并且按预期方式工作]
但对于下面的URL,响应应为400(禁止)。http://localhost:53858/api/v1.0/DemoTest
http://localhost:53858/api/v3.0/DemoTest
以下是相应的api versoinig案例的预期响应。https://github.com/Microsoft/aspnet-api-versioning/wiki/Error-Responses
直到现在尝试:我还尝试用MyErrorResponseProvider
覆盖DefaultError响应,但调试器根本没有命中它。
借助此asnswer
services.AddApiVersioning(o =>
{
o.ReportApiVersions = true;
o.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(1, 0);
o.AssumeDefaultVersionWhenUnspecified = true;
o.ErrorResponses = new MyErrorResponseProvider();
});
MyErrorResponseProvider
class MyErrorResponseProvider : DefaultErrorResponseProvider
{
// note: in Web API the response type is HttpResponseMessage
public override IActionResult CreateResponse( ErrorResponseContext context )
{
switch ( context.ErrorCode )
{
case "UnsupportedApiVersion":
context = new ErrorResponseContext(
context.Request,
context.StatusCode,
context.ErrorCode,
"My custom error message.",
context.MessageDetail );
break;
}
return base.CreateResponse( context );
}
}
下面的代码对我有用
我正在使用3.1.6版
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="3.1.6" />
我的startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddApiVersioning(options =>
{
options.ReportApiVersions = true;
options.AssumeDefaultVersionWhenUnspecified = true;
options.DefaultApiVersion = new ApiVersion(1, 0);
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
我的控制器
[ApiVersion("1.0")]
[ApiExplorerSettings(GroupName = "v1")]
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
如果尝试使用v2,则会出现此错误
error: {
code: "UnsupportedApiVersion",
message: "The HTTP resource that matches the request URI 'http://localhost:61273/api/v2/values' does not support the API version '2'.",
innerError: null
}