[解決済み] Swagger not loading - Failed to load API definition: フェッチエラーは未定義です
質問
IIS expressでホストされているWebアプリケーションと連動してswaggerをセットアップしようとしています。APIはASP Net Coreを使用して構築されています。私はSwashbuckleとASP.NET Coreに関する関連するマイクロソフトのヘルプページで規定されている指示に従いました。
今のところ、swaggerページを読み込むことができ、私が定義したSwaggerDocが読み込まれていることが確認できますが、APIは存在しません。現在、以下のエラーが発生しています。
Fetch error undefined ./swagger/v1/swagger.json"。
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// services.AddDbContext<TodoContext>(opt =>
// opt.UseInMemoryDatabase("TodoList"));
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
// Register the Swagger generator, defining 1 or more Swagger documents
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "API WSVAP (WebSmartView)", Version = "v1" });
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// Enable middleware to serve generated Swagger as a JSON endpoint.
app.UseSwagger();
// Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
// specifying the Swagger JSON endpoint.
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("./swagger/v1/swagger.json", "My API V1");
c.RoutePrefix = string.Empty;
});
app.UseMvc();
}
}
解決方法は?
で、いろいろトラブルシューティングした結果、基本的には2つのことに行き着いたのですが、一般的には今後の誰かの参考になるような気がするので、回答を投稿させていただきます。
まず、前述のエラーで立ち往生した場合、何が起こっているかを実際に確認する最良の方法は、Configure()メソッドに次の行を追加することです。
app.UseDeveloperExceptionPage();
ここで、「swagger/v1/swagger.json」ページに移動すると、有用な方向を示すいくつかの詳細な情報が表示されます。
次に、私の場合、エラーは次のようなものでした。
'パス 'some_path'とメソッド 'GET' で複数の操作 '
しかし、これらのAPIは依存ライブラリの中にあるため、定義の時点で解決策を適用することができませんでした。回避策として、ConfigureServices()メソッドに以下の行を追加することで問題が解決することがわかりました。
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "API WSVAP (WebSmartView)", Version = "v1" });
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); //This line
});
最後に- JSONファイルを生成することができましたが、まだUIを引き出すことができませんでした。これを動作させるために、Configure()のエンドポイントを変更する必要がありました。
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("./v1/swagger.json", "My API V1"); //originally "./swagger/v1/swagger.json"
});
なぜこれが必要なのかはわかりませんが、Webアプリケーションの仮想ディレクトリがIISでホストされていることが影響しているのかもしれませんね。
注:swagger/v1/swagger.jsonに移動すると詳細がわかりますが、私にとっては装飾されていないアクションが原因で問題が発生しました。この情報は、@MarkDのコメントで言及されています。
今後、どなたかのお役に立てれば幸いです。
関連
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?