В наших средах QA и Prod, которые управляют нашими веб-службами RESTful, порт 80 не открыт. Так что в настоящее время, когда я пытаюсь добраться до Swagger UI в QA, я получаю это сообщение, и он просто висит:Как получить интерфейс Swagger для использования порта 443 с Swashbuckle?
fetching resource list: http://qa-server:80/product-catalog-api/swagger/docs/v1; Please wait.
Я использую Swashbuckle настроить Swagger. Я также изменил эту строку в конфиге, но она по-прежнему не работает.
// If schemes are not explicitly provided in a Swagger 2.0 document, then the scheme used to access
// the docs is taken as the default. If your API supports multiple schemes and you want to be explicit
// about them, you can use the "Schemes" option as shown below.
//
c.Schemes(new[] { "https" });
Порт SSL 443 открыт, поэтому я хотел бы получить доступ к интерфейсу Swagger. Я могу вручную изменить http://qa-server:80/product-catalog-api/swagger/docs/v1
к https://qa-server/product-catalog-api/swagger/docs/v1
, а затем Кураж перечислит свои веб-методов, но зависает, когда я нажимаю Try it out!
Это выход из консоли: SCRIPT5: Access is denied. File: swagger-ui-min-js, Line: 10, Column: 4300
EDIT:
Так что я копал в еще кое-что, и получили немного дальше, но все еще не там, где я хочу быть. Если бы я посмотреть на источник файла Кураж index.html, я вижу проблему:
window.swashbuckleConfig = {
rootUrl: 'http://qa-server:80/product-catalog-api',
discoveryPaths: arrayFrom('swagger/docs/v1'),
booleanValues: arrayFrom('true|false'),
validatorUrl: stringOrNullFrom('null'),
customScripts: arrayFrom(''),
docExpansion: 'none',
oAuth2Enabled: ('false' == 'true'),
oAuth2ClientId: '',
oAuth2ClientSecret: '',
oAuth2Realm: '',
oAuth2AppName: '',
oAuth2ScopeSeperator: ' ',
oAuth2AdditionalQueryStringParams: JSON.parse('{}')
};
Даже если я перейти на сайт, как HTTPS и схема Swashbuckle установлен протокол HTTPS, он по-прежнему порождающая rootUrl как http. Я думаю, так как я использую Swashbuckle, я должен использовать его для настройки index.html, потому что у меня нет этого файла в любом месте моего кода, поэтому я думаю, что Swashbuckle генерирует его на лету.
Я выяснил, что мне не хватает при изменении пути swagger.json. По-видимому, ему нужен номер порта. Поэтому, если я перейду на страницу индекса swagger и вручную измените путь к json-файлу, который будет https://qa-server:443/product-catalog-api/swagger/docs/v1
, все будет хорошо. Итак, теперь я думаю, что я выделил проблему до того, как изменить rootUrl в Swaggers index.html с помощью Swashbuckle.
EDIT 2
Ну, я думаю, что я Swashbuckle настроен правильно, потому что он генерирует index.html правильно на нашем сервере DEV, но не Qa, так что я предполагаю, что остальная часть проблемы до некоторой разницы в средах или моем пакете не были правильно установлены в qa.
DEV:
window.swashbuckleConfig = {
rootUrl: 'https://server-dev:443/product-catalog-api',
discoveryPaths: arrayFrom('swagger/docs/v1'),
booleanValues: arrayFrom('true|false'),
validatorUrl: stringOrNullFrom('null'),
customScripts: arrayFrom(''),
docExpansion: 'none',
oAuth2Enabled: ('false' == 'true'),
oAuth2ClientId: '',
oAuth2ClientSecret: '',
oAuth2Realm: '',
oAuth2AppName: '',
oAuth2ScopeSeperator: ' ',
oAuth2AdditionalQueryStringParams: JSON.parse('{}')
};
QA:
window.swashbuckleConfig = {
rootUrl: 'http://qa-server:80/product-catalog-api',
discoveryPaths: arrayFrom('swagger/docs/v1'),
booleanValues: arrayFrom('true|false'),
validatorUrl: stringOrNullFrom('null'),
customScripts: arrayFrom(''),
docExpansion: 'none',
oAuth2Enabled: ('false' == 'true'),
oAuth2ClientId: '',
oAuth2ClientSecret: '',
oAuth2Realm: '',
oAuth2AppName: '',
oAuth2ScopeSeperator: ' ',
oAuth2AdditionalQueryStringParams: JSON.parse('{}')
};
EDIT 3
Мы сделали тест, чтобы еще больше изолировать проблему. У нас есть балансировщик нагрузки A10 в нашей среде QA. Мы подняли новый A10 для среды разработчиков, чтобы узнать, что произошло, и теперь у нас такая же проблема в dev. A10 выполнял некоторые манипуляции с заголовками http, которые мы удалили, чтобы увидеть, была ли эта проблема, но все равно получала то же самое. Я верю, что настроены серверы, SSL выгружается на A10, а в поле, на котором работает мой код, попадает http. Поэтому, когда код Swashbuckle работает, он работает под http, вызывая проблему. Я думаю, мне нужен способ заставить его всегда быть https.
Пожалуйста, посмотрите на мой ответ здесь: http://stackoverflow.com/questions/36527586/swagger-multiple -hosts-in-same-json-spec/36542927 # 36542927. Могу вам помочь. – Sampada
@Sampada Это помогает мне лучше понять проблему. Тем не менее, я до сих пор не знаю, как изменить файл index.html или json файла Swagger. Похоже, Swashbuckle создает их динамически, поэтому, вероятно, есть какая-то конфигурация Swashbuckle, которую я пропускаю. Прочитав ваш ответ, я получил дополнительную информацию, которую добавлю к моему вопросу. Благодаря! –
Рад помочь! Однако я понятия не имею о swashbuckle. Удачи тебе. – Sampada