.NET Core 2.1 上的 Swashbuckle/Swagger 自升級以來已停止工作
我有一個 .NET Core 2.0 應用程序,使用 Swashbuckle/Swagger 生成 API 文件。當我們使用 2.1.0 預覽版時,Swagger 執行良好。然後我們對 2.1.0 版本和 SDK 2.1.300 進行了大升級。我們沒有註意到事情發生的確切時間,但現在我們的 Swagger 文件將無法載入。這是我們看到的:
項目參考了
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 的問題。一旦您將失敗的原因縮小到更具體的原因,就可以根據需要進行修復或歸檔。
