アプリケーションにswagger UIを組み込みました。
Swagger UIを試してみると、APIのドキュメントがうまく表示されますが、しばらくするとボタンにエラーアイコンが表示されます。
エラーメッセージは次のようなものです。
[{"level": "error"、 "message": "ファイルから読み取れません http:// MYIP/swagger/docs/v1 "}]
何が原因なのか分かりません。リフレッシュすると動作し、数秒後にエラーが表示されます。
「 http:// MYIP/swagger/docs/v1 」は一般公開されていません。
デフォルトでは、swagger uiはオンラインバリデーターonline.swagger.ioを使用します。 swagger URLにアクセスできない場合、そのエラーメッセージが表示されます。
可能な解決策:
検証を無効にします。
config.EnableSwagger().EnableSwaggerUi(c => c.DisableValidator());
サイトを一般公開する
バリデーターをローカルでホストします。
バリデータは次の場所から取得できます。 https://github.com/swagger-api/validator-badge#running-locally
また、検証者の場所をswaggeruiに伝える必要があります。
config.EnableSwagger().EnableSwaggerUi(c => c.SetValidatorUrl(<validator_url>));
受け入れられた答えを補足するために...私は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();
swagger-ui
github repoのファイルを使用している場合、validatorUrl
をnull
に設定することで、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"
})
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;
}
Swashbuckle.ODataを使用しているときに同様の問題が発生した場合:
APIのODataControllerとSwashbuckle.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ページで説明されているアプローチを使用しましたが、機能していませんでした。可能なエンドポイントがまったく表示されていません。たぶん誰かがより良い解決策を知っています。