I develop an ASP.NET Core 2 application and included Swagger. Everything worked fine until I introduced a method without explicitly defining the HTTP action:
public class ErrorController : Controller
{
[Route("/error")]
public IActionResult Index()
{
return StatusCode(500, new Error("Internal error."));
}
}
When I started the app with this method, the following message showed up:
Failed to load API definition.
Errors
Fetch error Internal Server Error /swagger/v1/swagger.json
As soon as I explicitly set e.g. [HttpGet]
the error disappears. The problem with this is, I need this method to fire for all possible HTTP operations.
Of course, I could specify all operations explicitly, but I have the feeling Swagger should be able to handle this correctly.
Why does Swagger behave this way?
Is there any configuration I can use?
Add Httpxxx([HttpGet]
, [HttpPost]
, ...) attribute for each Action method, or [ApiExplorerSettings(IgnoreApi = true)]
Simply you can look into the log in the Output window. The actual error can be seen there in my case, I missed adding HTTP action on top of a methods
The option ResolveConflictingActions should be working on this case...
Here is the actual error:
System.NotSupportedException: Ambiguous HTTP method for action
That is coming from: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/86cc761bc4f5dda796f80ad8dfd8bc205542a6f6/src/Swashbuckle.AspNetCore.SwaggerGen/Generator/SwaggerGenerator.cs#L90
I think this is a bug, if you are truly interested you should report it to the project
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With