Редактор Swagger показывает ошибку Failed to fetch

Я новичок в Swagger и использую редактор Swagger Editor, работающий локально на моем рабочем столе, для тестирования API. Я не отвечаю за конфигурацию сервера и не имею доступа для внесения изменений. У меня настроены определения безопасности, и моя авторизация работает. Теперь я пытаюсь настроить свою первую схему пути, но когда я ее выполняю, я получаю сообщение об ошибке «TypeError: Failed to fetch», а поле Response Headers пусто.

введите описание изображения здесь

Однако когда я копирую запрос Curl, предоставленный редактором Swagger, и запускаю его в GitBash, он возвращает ожидаемое мной значение. Итак, я знаю, что редактор Swagger Editor создал рабочий запрос.

Я знаю, что моя авторизация безопасности работает, потому что я вижу токен, который он возвращает в запросе Curl.

Схема аутентификации и схема пути обращаются к разным субдоменам. Аутентификация обрабатывается betaauthorize.myDomain.com, а путь обрабатывается betaapi.myDoamin.com.

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

Опять же, я запускаю Swagger Editor со своего жесткого диска рабочего стола. Есть ли какой-то параметр конфигурации редактора Swagger, который мне не хватает? Есть ли проблема с конфигурацией сервера, о которой мне нужно сообщить администраторам сервера? Я пытался понять это в течение двух дней, и у меня нет идей. Мы ценим любые предложения.


person M.Shute    schedule 12.04.2017    source источник
comment
Есть ли ошибки в консоли браузера?   -  person Helen    schedule 12.04.2017
comment
Хороший вопрос @Helen. К исходному описанию я добавил запись ошибок консоли.   -  person M.Shute    schedule 12.04.2017
comment
У меня была эта проблема, и я решил ее, удалив app.Run(context => { context.Response.Redirect("swagger"); return Task.CompletedTask; }); из метода Startup Configure.   -  person Junior Mayhé    schedule 13.07.2019


Ответы (4)


Оказывается, моему коду требовался ключ авторизации для всех запросов, включая запросы OPTIONS. После некоторого исследования и консультаций я решил, что лучше всего отвечать на запросы OPTIONS без какой-либо авторизации - авторизация должна требоваться для последующих запросов. Как только я изменил код, чтобы продолжить работу без авторизации для запросов OPTIONS, я смог заставить Swagger работать для моего проекта.

person M.Shute    schedule 24.04.2017
comment
Где вы видите ВАРИАНТЫ? Можете показать конкретный случай? - person Peter Krauss; 18.07.2017
comment
В Chrome я открываю инструменты Dev с помощью клавиши F12. Затем вы можете увидеть запросы, в том числе запрос параметров, на вкладке «Сеть». Боюсь, я не могу публиковать какие-либо дополнительные подробности об этом деле, потому что это делается для работы. - person M.Shute; 19.07.2017

Это сообщение съедает настоящую ошибку. Проблема заключается либо в неправильной конфигурации API, например, CORS не позволяет возвращать файл json, либо в самой конфигурации Swagger.

Вот несколько вещей, которые стоит попробовать. При запущенном Swagger и сообщении в браузере

Перейдите непосредственно к самому URL-адресу JSON (например: http://myserver.domain:port/swagger/v1/swagger.json). Если вы получаете ошибку 404, значение SwaggerEndpoint неверно.

SwaggerEndpoint("incorrect/v1/swagger.json", "My incorrect Application Version 1");
SwaggerEndpoint("v1/swagger.json", "My correct Application Version 1");

Как только вы попытаетесь получить файл swagger.json по правильному пути, вы увидите либо JSON в своем браузере, либо исключение из вызова метода Swagger. Вы можете увидеть трассировку стека от Swagger, чтобы определить причину.

Одна из причин, по которой это происходит, заключается в том, что у вас есть общедоступный метод в контроллере, который не является конечной точкой API, но Swagger думает, что это так, пока он не сможет прочитать HTTPAttribute, чтобы определить, какой глагол использует конечная точка (т.е. GET, POST ...) или маршрут (/ controller / action / {parameter: dataType} / somethingElse)

// This should be private, not public!
public ReturnType MyHelperMethod(object parameter){
    //Do something to parameter
    return InstanceOfReturnType;
}

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

Пример: -

 [HttpGet, Route("something", Name = "Do Something")]
 public IActionResult DoSomething([FromBody] Datamodel.Something something)
 {
     var returnValue = Service.DoSomething(something);
     return returnValue;
 }

 [HttpGet, Route("somethingElse", Name = "Do Something Else")]
 public IActionResult DoSomethingElse([FromBody] IdenticalDatamodel.Something somethingElse)
 {
     var returnValue = Service.DoSomethingElse(somethingElse);
     return returnValue;
 }

namespace IdenticalDatamodel {
    public class Something {
         public string SomeProperty{ get; set;}
    }
}

namespace Datamodel {
    public class Something {
        public string SomeProperty{ get; set;}
    }
}

В этом случае класс Something из двух разных пространств имен имеет одинаковую схему, поэтому Swagger задыхается, поскольку они идентичны. Одно из исправлений - настроить Swagger на полную квалификацию идентификаторов схемы, поэтому Something в методе DoSomething () и Something в методе DoSomethingElse () вместо этого будут идентифицироваться как < strong> Datamodel.Something и IdenticalDatamodel.Something от Swagger при создании файла .json.

Для этого вы можете использовать следующий код в Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    //Add a bunch of service configurations here
    // ...

    // It's probably better to externalize the Swagger config to it's own private helper method
    services.AddSwaggerGen(swagger =>
    {
            // Setup your Swagger doc, security etc here
    });

    // Customize the Swagger generator here
    services.ConfigureSwaggerGen(options =>
    {
            // Use fully qualified schema object names to ensure uniqueness
            options.CustomSchemaIds(configuration => configuration.FullName);
    });
}
person Antony Booth    schedule 20.03.2019

Обычно эта ошибка возникает при использовании неправильной схемы HTTP / HTTPS. На странице вашего чванства есть раскрывающийся список схем. Убедитесь, что вы не выбрали https, если вы используете http. HTTPS - это значение по умолчанию.

Кроме того, убедитесь, что доступ к SwaggerUI осуществляется по правильному протоколу HTTPS.

person Obakeng Balatseng    schedule 18.07.2017

Я столкнулся с той же проблемой. Проблема возникает, когда редактор swagger размещен в другом домене, чем API.

Вам придется либо изменить это, либо установить соответствующие заголовки CORS.

Вот ссылка на документацию по swagger с Дополнительная информация.

person MaximeW    schedule 02.11.2018