Swashbuckle/Swagger + ASP.Net Core: 「API 定義の読み込みに失敗しました」質問する

Swashbuckle/Swagger + ASP.Net Core: 「API 定義の読み込みに失敗しました」質問する

私は ASP.NET Core 2 アプリケーションを開発し、Swagger を組み込みました。HTTP アクションを明示的に定義せずにメソッドを導入するまで、すべて正常に動作していました。

public class ErrorController : Controller
{
    [Route("/error")]
    public IActionResult Index()
    {
        return StatusCode(500, new Error("Internal error."));
    }
}

この方法でアプリを起動すると、次のメッセージが表示されました。

API定義の読み込みに失敗しました。

エラー
フェッチエラー 内部サーバーエラー /swagger/v1/swagger.json

たとえば、明示的に設定するとすぐに[HttpGet]エラーは消えます。これの問題は、このメソッドをすべての可能な HTTP 操作に対して実行する必要があることです。もちろん、すべての操作を明示的に指定することもできますが、Swagger はこれを正しく処理できるはずです。

Swagger がこのように動作するのはなぜですか?

使用できる設定はありますか?

services.AddSwaggerGen(c => 
{   
  c.SwaggerDoc("v1", new Info { Title = "My Service", Version = "v1" }); 
});  

app.UseSwagger(c => 
{   
  c.PreSerializeFilters.Add((swagger, httpReq) => swagger.Host = httpReq.Host.Value); 
});  

app.UseSwaggerUI(c => 
{   
  c.RoutePrefix = "swagger"; // serve the UI at root     
  c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs"); 
})

ベストアンサー1

各パブリック コントローラー メソッドに次の内容が含まれていることを確認します。

  • アクションメソッドのHttpxxx( [HttpGet], , ...) 属性、[HttpPost]
  • または[ApiExplorerSettings(IgnoreApi = true)]コントローラアクションではないメソッドの場合

おすすめ記事