Skip to content

Why api returns 200 (ok) if wrong Api version is provided in the call to api #557

@arvindmaurya37

Description

@arvindmaurya37

below are the version of NuGet is used.

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" });
            }
        }

for the above controller

http://localhost:53858/api/v2.0/DemoTest (this URL is valid and its response should be 200 and it is working as expected)

but for the below URL, the response should be 400(Forbidden). http://localhost:53858/api/v1.0/DemoTest

http://localhost:53858/api/v3.0/DemoTest

following are the expected responses for the respective api versoinig cases. Error Response
image

https://github.com/Microsoft/aspnet-api-versioning/wiki/Error-Responses

Tried Till now: I also tried to override the DefaultError Response with MyErrorResponseProvider but the debugger does not hit it at all.

with the help of this #233

Startup.cs

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 );
}
}

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions