Невозможно прочитать из проблемы с файлом в интерфейсе Swagger
Я включил Swagger UI в свое приложение.
Когда я пытаюсь увидеть swagger UI, я получаю документацию по API, но через некоторое время на кнопке появляется значок ошибки.
Сообщение об ошибке, как показано ниже:
[{"level": "error", "message": "Не удается прочитать из файла http://MYIP/swagger/docs/v1 "}]
Я не уверен, что вызывает это. Если я обновляю это работает и показывает ошибку через несколько секунд.
Ответы
Ответ 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, но он не работал: вообще не показывал возможных конечных точек. Может кто знает лучшее решение.