私は 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)]
コントローラアクションではないメソッドの場合