Can't read from file issue in Swagger UI

后端 未结 6 1578
无人共我
无人共我 2021-01-31 13:07

I have incorporated swagger UI in my application.

When I try and see the swagger UI, I get the documentation of the API nicely but after some time it shows some error i

相关标签:
6条回答
  • 2021-01-31 13:49

    Setting this.model.validatorUrl = null; in dist/swagger-ui.js worked for me ..

    // Default validator
    if(window.location.protocol === 'https:') {
      //this.model.validatorUrl = 'https://online.swagger.io/validator';
      this.model.validatorUrl = null;
    } else {
      //this.model.validatorUrl = 'http://online.swagger.io/validator';
      this.model.validatorUrl = null;
    }
    
    0 讨论(0)
  • 2021-01-31 13:51

    If you are using files from swagger-ui github repo, then you can disable schema validation from your index.html file by setting validatorUrl to null in it:

    window.onload = function() {
    
      // Build a system
      const ui = SwaggerUIBundle({
        url: "/docs/open_api.json",
        dom_id: '#swagger-ui',
    
        validatorUrl : null,   # <----- Add this line
    
        deepLinking: true,
        presets: [
          SwaggerUIBundle.presets.apis,
          SwaggerUIStandalonePreset
        ],
        plugins: [
          SwaggerUIBundle.plugins.DownloadUrl
        ],
        layout: "StandaloneLayout"
      })
    
    0 讨论(0)
  • 2021-01-31 14:00

    If you using PHP Laravel framework with L5-Swagger just uncomment

    'validatorUrl' => null,
    

    from the config file /config/l5-swagger.php

    0 讨论(0)
  • 2021-01-31 14:05

    To anynoe having similar issue when using Swashbuckle.OData:

    I was having issues to integrated Swagger with our OData endpoints (using ODataController for API and Swashbuckle.OData NuGet package). I had to write our own document filter for it and add it:

    GlobalConfiguration.Configuration
                .EnableSwagger(c =>
                    {
                        c.SingleApiVersion("v1", "OurSolution.API");
                        c.DocumentFilter<SwaggerDocumentFilter>();
                        //c.CustomProvider((defaultProvider) => new ODataSwaggerProvider(defaultProvider, c, GlobalConfiguration.Configuration));
                        c.IncludeXmlComments(GetXmlCommentsPath());
                        c.UseFullTypeNameInSchemaIds();
                        c.RootUrl(req => ConfigurationManager.AppSettings["AppUrl"]);
                    })
                .EnableSwaggerUi(c =>
                {
                    c.DisableValidator();
                });
    

    Apparently in order to avoid validation error I had to comment out line which is setting ODataSwaggerProvider along with turning off validator as mentioned in posts above. This makes usefulness of Swashbuckle.OData questionable yet I didn't test whatever it works with vanilla Swashbuckle.

    Note: I used approach described on GitHub page for Swashbuckle.OData but it was not working: showing no possible endpoints at all. Maybe somebody knows better solution.

    0 讨论(0)
  • 2021-01-31 14:06

    I am guessing "http://MYIP/swagger/docs/v1" is not publicly accessible.

    By default swagger ui uses an online validator: online.swagger.io. If it cannot access your swagger url then you will see that error message.

    Possible solutions:

    1. Disable validation:

      config.EnableSwagger().EnableSwaggerUi(c => c.DisableValidator());

    2. Make your site publicly accessible

    3. Host the validator locally:

    You can get the validator from: https://github.com/swagger-api/validator-badge#running-locally

    You will also need to tell swaggerui the location of the validator

    config.EnableSwagger().EnableSwaggerUi(c => c.SetValidatorUrl(<validator_url>));

    0 讨论(0)
  • 2021-01-31 14:06

    To supplement the accepted answer...I just uncommented one line in the SwaggerConfig.cs. I only wanted to get rid of the red error on the main swagger page by disabling the validator.

    // By default, swagger-ui will validate specs against swagger.io's online validator and display the result
    // in a badge at the bottom of the page. Use these options to set a different validator URL or to disable the
    // feature entirely.
    //c.SetValidatorUrl("http://localhost/validator");
    c.DisableValidator();
    
    0 讨论(0)
提交回复
热议问题