Nei nostri ambienti QA e Prod che eseguono i nostri servizi Web RESTful, la porta 80 non è aperta. Così, al momento quando cerco di arrivare a Swagger interfaccia utente in QA, ottengo questo messaggio e si blocca solo:Come faccio a ottenere l'interfaccia utente di Swagger per utilizzare la porta 443 con Swashbuckle?
fetching resource list: http://qa-server:80/product-catalog-api/swagger/docs/v1; Please wait.
Sto usando Swashbuckle per configurare Swagger. Ho anche cambiato questa riga nella configurazione, ma non funziona ancora.
// 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" });
La porta SSL 443 è aperta, quindi mi piacerebbe arrivare all'interfaccia utente di Swagger per eseguirla. Posso modificare manualmente http://qa-server:80/product-catalog-api/swagger/docs/v1
a https://qa-server/product-catalog-api/swagger/docs/v1
e poi Swagger elencherò i miei metodi web, ma si blocca quando clicco Try it out!
Questa è l'uscita dalla console: SCRIPT5: Access is denied. File: swagger-ui-min-js, Line: 10, Column: 4300
EDIT:
così mi è stato scavando nella un po 'di più e sono diventato un po' più lontano, ma non ancora dove voglio essere. Se ho vista origine sul file index.html Swagger, posso vedere il problema:
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('{}')
};
Anche se la sto navigazione verso il sito come https ed ho lo schema Swashbuckle impostato su HTTPS, è ancora generando il rootUrl come http. Penso che dal momento che sto usando Swashbuckle, devo usarlo per configurare index.html perché non ho quel file da nessuna parte nel mio codice, quindi immagino che Swashbuckle lo stia generando al volo.
Ho scoperto cosa mi mancava quando cambiavo il percorso di swagger.json. A quanto pare ha bisogno del numero di porta lì. Quindi, se si naviga alla pagina di indice swagger e si modifica manualmente il percorso del file json per essere https://qa-server:443/product-catalog-api/swagger/docs/v1
, tutto funziona correttamente. Quindi ora penso di aver isolato il problema fino a come cambio rootUrl in Swaggers index.html usando Swashbuckle.
EDIT 2
Beh, penso di avere Swashbuckle configurato correttamente perché genera l'index.html correttamente sul nostro server dev, ma non QA quindi credo che il resto del problema è fino a qualche differenza in ambienti o il mio pacchetto non è stato installato correttamente in 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
Abbiamo fatto un test per isolare ulteriormente il problema. Abbiamo un bilanciatore di carico A10 nel nostro ambiente QA. Abbiamo alzato una nuova A10 per l'ambiente di sviluppo per vedere cosa è successo e ora abbiamo lo stesso problema in dev. L'A10 stava facendo una manipolazione dell'intestazione http che abbiamo rimosso per vedere se quello era il problema ma otteneva sempre la stessa cosa. Credo che con il modo in cui i server sono configurati, SSL venga scaricato nella A10 e la casella che sta effettivamente eseguendo il mio codice sta ricevendo http. Quindi, quando viene eseguito il codice Swashbuckle, è in esecuzione sotto http causando il problema. Penso di aver bisogno di un modo per costringerlo a essere sempre https.
Si prega di dare un'occhiata alla mia risposta qui: http://stackoverflow.com/questions/36527586/swagger-multiple -hosts-in-same-json-spec/36542927 # 36542927. Potrebbe aiutarti. – Sampada
@Sampada Questo mi aiuta a capire meglio il problema. Tuttavia, non so ancora come modificare il file index.html o json di Swagger. Sembra che Swashbuckle li stia creando dinamicamente quindi probabilmente c'è qualche configurazione di Swashbuckle che mi manca. Dopo aver letto la tua risposta, ho ricevuto alcune informazioni aggiuntive che aggiungerò alla mia domanda. Grazie! –
Felice di aiutare! Non ho idea di cappa spessa però. Buona fortuna a te. – Sampada