Swagger UIでSwashbuckleでポート443を使用するにはどうすればよいですか?

ジャスティン・パヴァット

RESTful Webサービスを実行するQAおよびProd環境では、ポート80が開いていません。そのため、現在、QAでSwagger UIにアクセスしようとすると、次のメッセージが表示され、ハングします。

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が開いているので、SwaggerUIを使用して実行したいと思います。手動でに変更http://qa-server:80/product-catalog-api/swagger/docs/v1するhttps://qa-server/product-catalog-api/swagger/docs/v1と、SwaggerにWebメソッドが一覧表示されますTry it out!が、クリックするとハングします。これはコンソールからの出力です。SCRIPT5: Access is denied. File: swagger-ui-min-js, Line: 10, Column: 4300

編集:

それで、私はもう少し掘り下げて、もう少し遠くに行きましたが、それでも私がなりたい場所にはいません。Swagger 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すべてが正常に機能します。これで、Swashbuckleを使用してSwaggersindex.htmlのrootUrlを変更する方法まで問題を切り分けたと思います。

編集2

Swashbuckleは開発サーバーでindex.htmlを正しく生成するため、正しく構成されていると思いますが、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('{}')
};

編集3

問題をさらに特定するためにテストを行いました。QA環境にはA10ロードバランサーがあります。何が起こったのかを確認するために、開発環境用の新しいA10を立ち上げましたが、開発でも同じ問題が発生しています。A10はhttpヘッダーの操作を行っていましたが、それが問題であるかどうかを確認するために削除しましたが、それでも同じことが起こりました。サーバーのセットアップ方法で、SSLがA10にオフロードされ、実際にコードを実行しているボックスがhttpを取得していると思います。そのため、Swashbuckleコードを実行すると、httpで実行されているため、問題が発生します。常にhttpsにする方法が必要だと思います。

ジャスティン・パヴァット

やっと手に入れた!問題の切り分けを手伝ってくれたSampadaとstrick01に感謝します。Swashbuckleでhttpsを強制するソリューションを使用してgithubでこの記事を見つけました:

https://github.com/domaindrivendev/Swashbuckle/issues/296

config
    .EnableSwagger("docs/{apiVersion}",
    c =>
    {
      ...
      c.RootUrl(ResolveBasePath);
      ...
    })
    .EnableSwaggerUi();

private static string ResolveBasePath(HttpRequestMessage message)
{
    var virtualPathRoot = message.GetRequestContext().VirtualPathRoot;

    var schemeAndHost = "https://" + message.RequestUri.Host;
    return new Uri(new Uri(schemeAndHost, UriKind.Absolute), virtualPathRoot).AbsoluteUri;
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Swagger + Swashbuckleでエンドポイントを表示するにはどうすればよいですか?

分類Dev

swagger-uiを使用するにはどうすればよいですか?

分類Dev

アプリルートでswagger-uiを表示するにはどうすればよいですか?

分類Dev

ASP.NET Core Swagger(Swashbuckle.AspNetCore)でコントローラーの説明を定義するにはどうすればよいですか?

分類Dev

承認を使用するようにSwashBuckle.AspNetCore.Swaggerを設定するにはどうすればよいですか?

分類Dev

Swaggerが(Swagger UIページで)生成されたHTMLに新しい行を挿入するようにするにはどうすればよいですか?

分類Dev

swagger-uiの使用を開始するにはどうすればよいですか

分類Dev

swagger-uiのレイアウトを変更するにはどうすればよいですか?

分類Dev

KotlinをSwaggerで生成するにはどうすればよいですか?

分類Dev

swagger-uiで特定のメソッドを非表示にするにはどうすればよいですか?

分類Dev

Swaggerファイルをローカルで使用するにはどうすればよいですか?

分類Dev

OpenApiでswagger-ui.htmlURLをカスタマイズするにはどうすればよいですか

分類Dev

Swagger を使用して模擬サーバーを生成するにはどうすればよいですか?

分類Dev

Swagger UIでbodyパラメーターのネストされた配列の例を表示するにはどうすればよいですか?

分類Dev

Swagger UIでリクエストとともにAuthorizationヘッダーを送信するにはどうすればよいですか?

分類Dev

swagger-uiでコントローラーの名前を変更するにはどうすればよいですか?

分類Dev

springfoxのswagger-ui.htmlを変更するにはどうすればよいですか?

分類Dev

/ swagger-ui.htmlにリダイレクトするようにSpringBoot(Kotlin)アプリを構成するにはどうすればよいですか?

分類Dev

APIの説明と応答の例でServiceStackOpenApiFeature / Swaggerを使用するにはどうすればよいですか?

分類Dev

Swaggerドキュメントで複数の例を表示するにはどうすればよいですか?

分類Dev

Swagger-PHPでデフォルトのJSON本文を指定するにはどうすればよいですか?

分類Dev

Swagger UIのパラメーターのデフォルト値を定義するにはどうすればよいですか?

分類Dev

Swagger UIの[FromQuery]パラメーターのデフォルト値を定義するにはどうすればよいですか?

分類Dev

swagger-maven-pluginで使用されるデフォルトのJacksonマッパーを変更するにはどうすればよいですか?

分類Dev

Flask_restplusでSwaggerのベースURLを設定するにはどうすればよいですか?

分類Dev

SwaggerがWebSecurityConfigをバイパスできるようにするにはどうすればよいですか?

分類Dev

.NET Core Web APIでUIをSwaggerするためのアップロードボタンを追加するにはどうすればよいですか?

分類Dev

Swashbuckleに日付付き(時間なし)のSwaggerプロパティを生成させるにはどうすればよいですか?

分類Dev

Swagger UI-デフォルトですべての操作を拡張するにはどうすればよいですか?

Related 関連記事

  1. 1

    Swagger + Swashbuckleでエンドポイントを表示するにはどうすればよいですか?

  2. 2

    swagger-uiを使用するにはどうすればよいですか?

  3. 3

    アプリルートでswagger-uiを表示するにはどうすればよいですか?

  4. 4

    ASP.NET Core Swagger(Swashbuckle.AspNetCore)でコントローラーの説明を定義するにはどうすればよいですか?

  5. 5

    承認を使用するようにSwashBuckle.AspNetCore.Swaggerを設定するにはどうすればよいですか?

  6. 6

    Swaggerが(Swagger UIページで)生成されたHTMLに新しい行を挿入するようにするにはどうすればよいですか?

  7. 7

    swagger-uiの使用を開始するにはどうすればよいですか

  8. 8

    swagger-uiのレイアウトを変更するにはどうすればよいですか?

  9. 9

    KotlinをSwaggerで生成するにはどうすればよいですか?

  10. 10

    swagger-uiで特定のメソッドを非表示にするにはどうすればよいですか?

  11. 11

    Swaggerファイルをローカルで使用するにはどうすればよいですか?

  12. 12

    OpenApiでswagger-ui.htmlURLをカスタマイズするにはどうすればよいですか

  13. 13

    Swagger を使用して模擬サーバーを生成するにはどうすればよいですか?

  14. 14

    Swagger UIでbodyパラメーターのネストされた配列の例を表示するにはどうすればよいですか?

  15. 15

    Swagger UIでリクエストとともにAuthorizationヘッダーを送信するにはどうすればよいですか?

  16. 16

    swagger-uiでコントローラーの名前を変更するにはどうすればよいですか?

  17. 17

    springfoxのswagger-ui.htmlを変更するにはどうすればよいですか?

  18. 18

    / swagger-ui.htmlにリダイレクトするようにSpringBoot(Kotlin)アプリを構成するにはどうすればよいですか?

  19. 19

    APIの説明と応答の例でServiceStackOpenApiFeature / Swaggerを使用するにはどうすればよいですか?

  20. 20

    Swaggerドキュメントで複数の例を表示するにはどうすればよいですか?

  21. 21

    Swagger-PHPでデフォルトのJSON本文を指定するにはどうすればよいですか?

  22. 22

    Swagger UIのパラメーターのデフォルト値を定義するにはどうすればよいですか?

  23. 23

    Swagger UIの[FromQuery]パラメーターのデフォルト値を定義するにはどうすればよいですか?

  24. 24

    swagger-maven-pluginで使用されるデフォルトのJacksonマッパーを変更するにはどうすればよいですか?

  25. 25

    Flask_restplusでSwaggerのベースURLを設定するにはどうすればよいですか?

  26. 26

    SwaggerがWebSecurityConfigをバイパスできるようにするにはどうすればよいですか?

  27. 27

    .NET Core Web APIでUIをSwaggerするためのアップロードボタンを追加するにはどうすればよいですか?

  28. 28

    Swashbuckleに日付付き(時間なし)のSwaggerプロパティを生成させるにはどうすればよいですか?

  29. 29

    Swagger UI-デフォルトですべての操作を拡張するにはどうすればよいですか?

ホットタグ

アーカイブ