web-dev-qa-db-ja.com

Swagger UIでファイルの問題を読み取れない

アプリケーションにswagger UIを組み込みました。

Swagger UIを試してみると、APIのドキュメントがうまく表示されますが、しばらくするとボタンにエラーアイコンが表示されます。

エラーメッセージは次のようなものです。

[{"level": "error"、 "message": "ファイルから読み取れません http:// MYIP/swagger/docs/v1 "}]

何が原因なのか分かりません。リフレッシュすると動作し、数秒後にエラーが表示されます。

64
Abi P

http:// MYIP/swagger/docs/v1 」は一般公開されていません。

デフォルトでは、swagger uiはオンラインバリデーターonline.swagger.ioを使用します。 swagger URLにアクセスできない場合、そのエラーメッセージが表示されます。

可能な解決策:

  1. 検証を無効にします。

    config.EnableSwagger().EnableSwaggerUi(c => c.DisableValidator());

  2. サイトを一般公開する

  3. バリデーターをローカルでホストします。

バリデータは次の場所から取得できます。 https://github.com/swagger-api/validator-badge#running-locally

また、検証者の場所をswaggeruiに伝える必要があります。

config.EnableSwagger().EnableSwaggerUi(c => c.SetValidatorUrl(<validator_url>));

91
Jon R

受け入れられた答えを補足するために...私はSwaggerConfig.csの1行のコメントを外しました。検証ツールを無効にすることで、メインのswaggerページの赤いエラーを取り除きたいだけです。

// By default, swagger-ui will validate specs against swagger.io's 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();
18
Justin Pavatte

swagger-ui github repoのファイルを使用している場合、validatorUrlnullに設定することで、index.htmlファイルからスキーマ検証を無効にできます。

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"
  })
6
Atul Vaibhav

PHP Laravel framework with L5-Swagger を使用する場合

'validatorUrl' => null,

構成ファイルから/config/l5-swagger.php

2

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;
}
1
bobbyrne01

Swashbuckle.ODataを使用しているときに同様の問題が発生した場合:

APIのODataControllerSwashbuckle.ODataNuGetパッケージ)。独自のドキュメントフィルターを作成して追加する必要がありました。

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の有用性に疑問が生じますが、Vanilla Swashbuckleで動作するものをテストしませんでした。

注:Swashbuckle.ODataのGitHubページで説明されているアプローチを使用しましたが、機能していませんでした。可能なエンドポイントがまったく表示されていません。たぶん誰かがより良い解決策を知っています。

0
Diomos