Подтвердить что ты не робот

Невозможно прочитать из проблемы с файлом в интерфейсе Swagger

Я включил Swagger UI в свое приложение.

Когда я пытаюсь увидеть swagger UI, я получаю документацию по API, но через некоторое время на кнопке появляется значок ошибки.

Сообщение об ошибке, как показано ниже:

[{"level": "error", "message": "Не удается прочитать из файла http://MYIP/swagger/docs/v1 "}]

Я не уверен, что вызывает это. Если я обновляю это работает и показывает ошибку через несколько секунд.

4b9b3361

Ответ 1

Я предполагаю, что http://MYIP/swagger/docs/v1" не является общедоступным.

По умолчанию swagger ui использует онлайн-валидатор: online.swagger.io. Если он не сможет получить доступ к вашему URL-адресу swagger, вы увидите это сообщение об ошибке.

Возможные решения:

  • Отключить проверку:

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

  • Сделайте свой сайт общедоступным

  • Локальный локатор проверки:

Вы можете получить валидатор от: https://github.com/swagger-api/validator-badge#running-locally

Вам также нужно будет указать swaggerui расположение валидатора

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

Ответ 2

Чтобы дополнить принятый ответ... Я просто раскоментировал одну строку в SwaggerConfig.cs. Я только хотел избавиться от красной ошибки на главной странице swagger, отключив валидатор.

// By default, swagger-ui will validate specs against swagger.io 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();

Ответ 3

Если вы используете файлы из swagger-ui github, то вы можете отключить проверку схемы в своем файле index.html, установив для validatorUrl значение null:

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

Ответ 4

Если вы используете PHP Laravel framework с L5-Swagger просто раскомментировать

'validatorUrl' => null,

из конфигурационного файла /config/l5-swagger.php

Ответ 5

Настройка this.model.validatorUrl = null; в dist/swagger-ui.js работала для меня..

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

Ответ 6

Для любого, имеющего подобную проблему при использовании Swashbuckle.OData:

У меня были проблемы с интеграцией Swagger с нашими конечными точками OData (используя ODataController для API и пакет Swashbuckle.OData NuGet). Мне пришлось написать собственный фильтр документов для него и добавить его:

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

По-видимому, чтобы избежать ошибки проверки, мне пришлось закомментировать строку, которая устанавливает ODataSwaggerProvider вместе с отключением валидатора, как упомянуто в постах выше. Это ставит под сомнение полезность Swashbuckle.OData, но я не проверял, работает ли он с ванильным Swashbuckle.

Примечание: я использовал подход, описанный на странице GitHub для Swashbuckle.OData, но он не работал: вообще не показывал возможных конечных точек. Может кто знает лучшее решение.