Debugging Swashbuckle Error - Failed to load API Definition
Solution 1
Agree that the UI debugging isn't really useful, however the full exception trace can be scraped by opening up your browser's debugging tools (e.g. F12 on Chrome), refreshing your /swagger
endpoint, and then examining the swagger.json
payload - this is an XHR request which will fail with a 500
status code.
(I would suggest on a big project that you bookmark the link, so that in future you can just go straight to the json file, e.g. https://MyHost/swagger/v1/swagger.json
)
e.g. in the below contrived error, I've duplicated the same route between two methods:
[HttpGet]
[Route("parseenum")]
public ActionResult CheckEnum([FromQuery] MyEnum someEnum)
...
[HttpGet]
[Route("parseenum")]
public ActionResult CheckEnum2([FromQuery] MyEnum someEnum)
...
Which produces the error:
Which you should now be able to track down and fix.
Solution 2
If your api have same two or more [HttpGet]
its not working swagger.
You should be specify [HttpGet] , [HttpGet ("{id}")]
[HttpGet]
`[HttpGet ("{id}")]`
Related videos on Youtube
Fabricio Rodriguez
I'm a software developer based in Pretoria, South Africa. I develop in C# / .Net (mainly WinForms, WPF and .Net Core Web API) and have recently started learning Angular.
Updated on July 21, 2020Comments
-
Fabricio Rodriguez almost 4 years
Is there any way to get a stack trace or inner exceptions on Swashbuckle/Swagger errors? At some point, it stopped working. I'm not sure if it was when I upgraded from .Net Core 2.0 to 2.1, but I'm pretty sure it was still working after that. When I navigate to myapidomain/swagger/index.html I get this error:
Which is not very helpful. It was working 2 or so weeks ago... I didn't change any Swagger configuration. It's the same as it's always been:
public void ConfigureServices(IServiceCollection services) { ... services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Version = "v1", Title = "My.API", Description = "Test" }); }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) app.UseDeveloperExceptionPage(); else app.UseHsts(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "PropWorx API V1"); }); ... }
I'm using Swashbuckle.AspNetCore 3.0.0 on an ASP.Net Core 2.1 Web API.
-
Helder Sepulveda almost 6 yearsWhat do you get when you open
swagger/v1/swagger.json
-
-
MsDeveloper over 5 yearsYes , the swagger use default route that Controller makes , all the Programmer route the API by them selfs , so the swagger can not find our route , and use default , to use them , so we must to remove all the [Route] from top of [http..] or beside them like [httpget,[Route("...")]] it`s work fine without them
-
MsDeveloper over 5 yearsand unfortunately i forget to say you this point , you must set your API route like this : [Route("api/[controller]")]