Ошибка swagger 500

The setup for Swagger is varying greatly from version to version. This answer is for Swashbuckle 6.0.0-beta9 and Asp.Net Core 1.0. Inside of the ConfigureServices method of Startup.cs, you need to add —

 services.AddSwaggerGen(c =>
    {
      c.SingleApiVersion(new Info
      {
        Version = "v1",
        Title = "My Awesome Api",
        Description = "A sample API for prototyping.",
        TermsOfService = "Some terms ..."
      });
    });

Then in the Configure method you must add —

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    app.UseMvc();
    app.UseSwaggerGen();
    app.UseSwaggerUi();
}

Be sure you are referencing in Startup.cs —

using Swashbuckle.SwaggerGen.Generator;

My project.json file looks like —

"dependencies": {
    "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-*",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final",
    "Swashbuckle": "6.0.0-beta9"
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": "portable-net45+win8+dnxcore50"
    },
    "Microsoft.EntityFrameworkCore.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": [
        "portable-net45+win8+dnxcore50",
        "portable-net45+win8"
      ]
    }
  },

  "frameworks": {
    "net452": { }
  },
  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true,
    "xmlDoc": false
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account

Closed

ko-vasilev opened this issue

Feb 29, 2016

· 8 comments

Comments

@ko-vasilev

I just made the simplest setup for my project, but for some reason it always returns 500 error when I’m trying to get swagger.json file.
This is what I always see when trying to access /swagger/ui/index.html page
http://screencast.com/t/uWxgYZEx

@domaindrivendev

If you navigate directly to the swagger.json endpoint, which is the request that’s returning a 500, you should get more detailed error info

@ko-vasilev

Unfortunately I’m getting no extra info, only blank screen.

@rynowak

@ko-vasilev

I had no idea about this package and method.
Here is the stack trace that is displayed when trying to access the swagger.json

System.NotSupportedException: Unbounded HTTP verbs for path ‘Api’. Are you missing an HttpMethodAttribute?
at Swashbuckle.SwaggerGen.DefaultSwaggerProvider.CreatePathItem(IEnumerable1 apiDescriptions, ISchemaRegistry schemaRegistry) at Swashbuckle.SwaggerGen.DefaultSwaggerProvider.<>c__DisplayClass4_0.<GetSwagger>b__4(IGrouping2 group)
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector, IEqualityComparer1 comparer)
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func`2 elementSelector)
at Swashbuckle.SwaggerGen.DefaultSwaggerProvider.GetSwagger(String apiVersion, String host, String basePath, String[] schemes)
at Swashbuckle.Application.SwaggerGenMiddleware.d__5.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Swashbuckle.Application.SwaggerUiMiddleware.d__5.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Swashbuckle.Application.RedirectMiddleware.d__4.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Microsoft.AspNet.Builder.RouterMiddleware.d__4.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Microsoft.ApplicationInsights.AspNet.ExceptionTrackingMiddleware.d__4.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Microsoft.ApplicationInsights.AspNet.RequestTrackingMiddleware.d__4.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Microsoft.AspNet.IISPlatformHandler.IISPlatformHandlerMiddleware.d__8.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Microsoft.AspNet.Diagnostics.DeveloperExceptionPageMiddleware.d__7.MoveNext()

@SimonTouchtech

I’m not sure of the exact reason this error occurs, but we were able to fix it by adding an HttpMethodAttribute, just like the error message says. I don’t know the implementation details of Swashbuckle and if this requirement could be removed but simply add an [HttpGet] or [HttpPost] or whatever HTTP method you’re using above your method and it should do the trick.

@freshdev1

@domaindrivendev

@SimonTouchtech — regardless of SB, if you don’t decorate actions with an explicit [HttpXXX] attribute you’re allowing it to be called with any of the HTTP verbs. Rather than second guessing which of the verbs you intend the operation to be called with, SB forces you to be explicit.

The same dilemma arises out of ambiguous model binding when you don’t specify what part of the request (uri, header, body etc.) a parameter is populated from — any of them will work and so SB can’t be sure which you intended.

Despite some criticism around SB forcing you to be explicit (see #47), I’m strongly against ambiguity in API contracts, to the extent I’m not willing to go out of my way to support it. At least that’s my stance as of now :)

MarkPieszak

pushed a commit
to TrilonIO/aspnetcore-angular-universal
that referenced
this issue

Jun 22, 2017

@MarkPieszak

This fixes #310. 
Error 500 was occurring on requesting swagger.json 

(http://localhost:5000/swagger/v1/swagger.json) under the following conditions:
 - Pulled the project "as is" from GitHub
 - The environment is set to Development (as per this post)
 - Launch the project (F5)
 - Swagger UI gets loaded (http://localhost:5000/swagger/)

See Swagger's requirements on method attributes in the comment here - domaindrivendev/Swashbuckle.AspNetCore#69 (comment)

Closes #310

GrandofDeveolop

added a commit
to GrandofDeveolop/angular-2-aspnet
that referenced
this issue

Sep 21, 2017

@GrandofDeveolop

This fixes #310. 
Error 500 was occurring on requesting swagger.json 

(http://localhost:5000/swagger/v1/swagger.json) under the following conditions:
 - Pulled the project "as is" from GitHub
 - The environment is set to Development (as per this post)
 - Launch the project (F5)
 - Swagger UI gets loaded (http://localhost:5000/swagger/)

See Swagger's requirements on method attributes in the comment here - domaindrivendev/Swashbuckle.AspNetCore#69 (comment)

Closes #310

@leeroya

This highlighted where to look for the issue, thank you

I was working with some ASP.NET WebApi code and needed to test something using the Swagger UI. Usually, it’s just a matter of starting the project and going to your /swagger directory. Unfortunately, in this case, I went to my swagger URL and got an error saying “Failed to load API definition — Fetch error — Internal Server Error /swagger/v1/swagger.json.” How do you fix this error?

The Swagger UI error

I knew that it used to work but I’d just updated about a half zillion things in my code including upgrading to .NET Core 5 so I wasn’t really sure what broke it. I assumed the worst.

The dev tools in Edge was showing me that it was trying to access swagger.json but it was getting an HTTP 500 error. My guess was that I had a configuration problem in Startup.cs and that the swagger.json file either wasn’t being generated or it was in the wrong place. I checked a bunch of stuff and didn’t find anything.

The call to get swagger.json returns HTTP 500

The call to get swagger.json was returning HTTP 500

I eventually started to figure out what was going wrong when I opened that call to swagger.json in its own tab.

The error message on that HTTP 500 to swagger.json

The actual error message says that there’s an “ambiguous HTTP method for action”. I wasn’t really sure what that meant by helpfully the error message pointed me at the WebApi endpoint action that was causing the problem. Rather than being a problem with some kind of swagger config, the error was coming from the code that I’d just been working on.

Swashbuckle.AspNetCore.SwaggerGen.SwaggerGeneratorException: Ambiguous HTTP method for action - SwaggerError.WebApi.Controllers.WeatherForecastController.Overview (SwaggerError.WebApi). Actions require an explicit HttpMethod binding for Swagger/OpenAPI 3.0
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperations(IEnumerable`1 apiDescriptions, SchemaRepository schemaRepository)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GeneratePaths(IEnumerable`1 apiDescriptions, SchemaRepository schemaRepository)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String host, String basePath)
   at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

Here’s the code that’s causing the problem:

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    [Route("/[controller]/[action]/{id}")]
    public ActionResult Overview(int? id)
    {
        return Ok(id);
    }
}

Looks pretty ordinary, right? Nothing to exciting here. So what’s broken? What’s “ambiguous” about this? It’s missing the HttpGet attribute.

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    [HttpGet]
    [Route("/[controller]/[action]/{id}")]
    public ActionResult Overview(int? id)
    {
        return Ok(id);
    }
}

As soon as I added that missing [HttpGet] attribute, the Swagger UI was working again.

Summary

In short, the problem was a problem in my code. I’d assumed that my WebApi controller action would default to HTTP GET but it seems that that doesn’t agree with Swagger. As soon as I added that missing attribute, everything was fine.

I hope this helps.

-Ben

— Looking for help on your .NET Core projects? Want some guidance on how to get going with Azure DevOps or GitHub Actions? Need a Scrum coach to help your teams get over a delivery slump? We can help. Drop us a line at info@benday.com.


Problem

I have an ASP.NET CORE Web API (3.1) project with Swashbuckle.AspNetCore (6.1.1). When I run the project, I got this error below.

HTTP Error 500.30 - ANCM In-Process Start Failure - ASP.NET CORE Web API + Swagger

Error Message

Here is the error message that I got in Visual Studio Debug output windows.

(Inner Exception #1) System.InvalidOperationException: Error while validating the service descriptor ‘ServiceType: Microsoft.Extensions.ApiDescriptions.IDocumentProvider Lifetime: Singleton ImplementationType: Microsoft.Extensions.ApiDescriptions.DocumentProvider’: Unable to resolve service for type ‘Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupCollectionProvider’ while attempting to activate ‘Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator’.
—> System.InvalidOperationException: Unable to resolve service for type ‘Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupCollectionProvider’ while attempting to activate ‘Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator’.
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type serviceType, Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.<>c__DisplayClass7_0.b__0(Type type)
at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type serviceType, Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(ServiceDescriptor serviceDescriptor, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.ValidateService(ServiceDescriptor descriptor)
— End of inner exception stack trace —
at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.ValidateService(ServiceDescriptor descriptor)
at Microsoft.Extensions.DependencyInjection.ServiceProvider..ctor(IEnumerable`1 serviceDescriptors, ServiceProviderOptions options)<—

Solution

The solution is that you make sure that you have services.AddControllers(); in ConfigureServices(IServiceCollection services) method. If you don’t have it, please add that line. Your problem will be solved and you should be able to see the swagger page.

Example:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public void ConfigureServices(IServiceCollection services)
{
   services.AddControllers();
   services.AddSwaggerGen(c =>
   {
         c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApplication9", Version = "v1" });
   });

...

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   app.UseSwagger();
   app.UseSwaggerUI(c => c.SwaggerEndpoint("v1/swagger.json", "WebApplication9 v1"));

One more tip ~

If you are getting this error below, you need to make sure that you have at least one controller that has a method with [Http{Verb}] e.g. [HttpGet].

Failed to load API definition.

Fetch errorundefined https://localhost:**/swagger/v1/swagger.json

Failed to load API definition - ASP.NET CORE Web API + Swagger

Because you might be using the attribute-routed instead of conventional-routed. Please check this code endpoints.MapControllers() in Startup.cs.

1
2
3
4
app.UseEndpoints(endpoints =>
{
      endpoints.MapControllers();
});

If you are using the attribute-routed, you need to have the followings in order to see the swagger image.

  1. At least one ApiController
  2. That ApiController should have [Route("[controller]")] attribute.
  3. It should have at least one method that has [Http{Verb}] e.g. [HttpGet].

Please refer to the example code below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
[ApiController]
    [Route("[controller]")]
    public class PurchaseOrderController : ControllerBase
    {
        /// <summary>
        /// Create the Purchase Order.
        /// </summary>
        /// <param name="po">The details of Purchase order.</param>
        /// <returns>Http Status 201 - If Succed.</returns>
        [HttpPost]
        public async Task<IActionResult> Post(PurchaseOrderRequestModel po)
        {
            Console.Write(po.Id);
            await Task.Delay(1);
            return StatusCode(201, 1);
        }
    }

Hope it helps.

  • Remove From My Forums
  • Question

  • Hi everyone,

    I get a 500 error message while trying to access the swagger/ui/index of my API App:

    500 : { «status»: 500, «source»: «https://microsoft-apiappXXXX.azurewebsites.net/swagger/docs/v1», «message»: «An error has occurred.» } https://microsoft-apiappXXXX.azurewebsites.net:443/swagger/docs/v1

    When I try to look at the swagger configuration directly, I see the following error:

    <Error>
    
    
    <Message>An error has occurred.</Message>
    
    </Error>

    Looking at the streaming logs of my gateway, I get the following information:

    The page you are looking for cannot be displayed because an invalid method (HTTP verb) is being used.
    
    
    
    Module
       __DynamicModule_Microsoft.Owin.Host.SystemWeb.OwinHttpModule, Microsoft.Owin.Host.SystemWeb, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35_460c9b3e-b206-410c-88ff-cc609f15deb3 
    
    Notification
       MapRequestHandler 
    
    Handler
       ExtensionlessUrlHandler-Integrated-4.0 
    
    Error Code
       0x00000000 
    
    
    
    Requested URL
       https://Enough-OpenExperiments-RGfb0007dc614f4b049400b389e5016d4a:80/ 
    
    Physical Path
       C:Program Files (x86)SiteExtensionsApiAppsGateway.9.79 
    
    Logon Method
       Anonymous 
    
    Logon User
       Anonymous 
    

    The page you are looking for cannot be displayed because an invalid method (HTTP verb) is being used.

    Module    __DynamicModule_Microsoft.Owin.Host.SystemWeb.OwinHttpModule, Microsoft.Owin.Host.SystemWeb, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35_460c9b3e-b206-410c-88ff-cc609f15deb3
    Notification    MapRequestHandler
    Handler    ExtensionlessUrlHandler-Integrated-4.0
    Error Code    0x00000000
    Requested URL    https://Enough-OpenExperiments-RGfb0007dc614f4b049400b389e5016d4a:80/
    Physical Path    C:Program Files (x86)SiteExtensionsApiAppsGateway.9.79
    Logon Method    Anonymous
    Logon User    Anonymous

    Any idea

    what’s going on there? I don’t have any duplicate method IDs, also I’ve updated swashbuckle to the latest release (5.2.2).

    Of course locally everything works fine.

    Thanks in advance,

    Robert


    Changing the world… bit by bit.

Answers

  • ok, Azure needs to improve upon error reporting. In the end what helped me was to select «Remove additional files at destination» in the «File Publish Options» within the «Settings» pane of the Publish dialog.

    I also changed my Webconfig.xml and added customErrors mode=off in my system.web settings:

    <system.web>
        <compilation debug="true" targetFramework="4.5.2" />
        <httpRuntime targetFramework="4.5.2" />
        <customErrors mode="Off"/>
    </system.web>

    Hopefully this helps other in tracking down errors.

    Robert


    Changing the world… bit by bit.

    • Marked as answer by

      Tuesday, November 17, 2015 10:20 AM

Понравилась статья? Поделить с друзьями:
  • Ошибка sw0100 фанук
  • Ошибка svs на лифан смайли что это такое
  • Ошибка stop 0x000000d1 windows 7 как исправить
  • Ошибка stop 0x000000c4
  • Ошибка stop 0x000000c2