Asp.net-Core

.NET Core 2.1 上的 Swashbuckle/Swagger 自升級以來已停止工作

  • April 12, 2020

我有一個 .NET Core 2.0 應用程序,使用 Swashbuckle/Swagger 生成 API 文件。當我們使用 2.1.0 預覽版時,Swagger 執行良好。然後我們對 2.1.0 版本和 SDK 2.1.300 進行了大升級。我們沒有註意到事情發生的確切時間,但現在我們的 Swagger 文件將無法載入。這是我們看到的: 載入 API 定義失敗 錯誤 獲取錯誤 undefined /swagger/v1/swagger.json

項目參考了Swashbuckle.AspNetCore2.5.0 版本。中的相關程式碼Startup.cs如下。在ConfigureServices()

services.AddSwaggerGen(swaggerOptions =>
{
   // Register a swagger doc
   swaggerOptions.SwaggerDoc("v1", new Info
   {
       // Optional descriptive info that will be included in the Swagger output
       Contact = new Contact
       {
           Name = "LightSail",
           Url = "https://myurl.com/"
       },
       Description = "A description of the API can go here",
       Title = "My API",
       Version = "v1"
   });

   // Xml file to get comment information from
   swaggerOptions.IncludeXmlComments("App_Data/Api.xml");
});

並在Configure()

app.UseSwagger();

app.UseSwaggerUI(swaggerUiOptions => swaggerUiOptions.SwaggerEndpoint("/swagger/v1/swagger.json", "My API v1"));

我發現了很多其他類似的問題,其中一個表明可能存在重複的端點;我嘗試添加一個電話,.ResolveConflictingEndpoints()但這沒有任何區別。我搜尋了我的項目文件夾,沒有名為 的文件swagger.json,所以我猜這就是問題所在。

任何想法為什麼這不起作用,或者如何解決?

這通常表示 Swashbuckle 出於某種原因不支持的控制器/操作。

預計您的項目中沒有 swagger.json 文件。Swashbuckle 使用 ASP.NET Core 的 ApiExplorer API 動態創建和提供服務。這裡可能發生的是 Swashbuckle 無法生成 Swagger.json,因此 UI 無法顯示。

正如 HelderSepu 所說,很難確切地知道是什麼導致了失敗,所以最好的調試方法可能只是刪除一半的控制器(只需將文件移動到臨時位置)並檢查問題是否仍然存在。然後你就會知道你的哪一半控制器包含了麻煩的動作。您可以“二進制搜尋”刪除控制器(然後是操作),直到找出導致 Swashbuckle 無法生成 Swagger.json 的操作方法。一旦你知道了,這應該是你的程式碼中的一些問題還是應該在Swashbuckle repo中送出的問題。

例如,Swashbuckle 似乎不支持開放泛型,因此具有類似的響應類型屬性[ResponseType(typeof(IEnumerable<>))]可能會導致這種行為。這也可能是路線不明確或類似絆倒 Swashbuckle 的問題。一旦您將失敗的原因縮小到更具體的原因,就可以根據需要進行修復或歸檔。

引用自:https://stackoverflow.com/questions/50906772