ниже используется версия NuGet.
PackageReference Include = "Microsoft.AspNetCore.Mvc.Versioning" Version = "2.3.0" PackageReference Include = "Microsoft.AspNetCore.Mvc. Versioning.ApiExplorer "Version =" 2.2.0 "PackageReference Include =" Swashbuckle.AspNetCore "Version =" 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
Попробовал до сих пор : я также попытался переопределить ответ DefaultError с помощью MyErrorResponseProvider
, но отладчик не ударил его вообще.
с помощью этого 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 );
}
}