參考資料:Stack Overflow
我自己寫的demo:SwaggerDemoApi
在已有的webapi項目或者創建webapi項目中,打開nuget管理器
搜索:swagger
安裝截圖中的插件到你的webapi項目中 ,安裝完成后,項目根目錄下也可能會出現SwaggerNet.cs文件,把這個文件刪除掉即可。
這個插件是自動安裝的,依賴於Swagger.Net.UI
安裝完成之后,發現項目根目錄--App_Start目錄下回產生兩個文件
打開SwaggerNet.cs文件,把我截圖中的代碼注釋掉,不然會報錯,報錯信息:程序集“Swagger.Net, Version=0.5.1.0, Culture=neutral, PublicKeyToken=null”中的類型“Swagger.Net.XmlCommentDocumentationProvider”的方法“GetDocumentation”沒有實現。
把圖中代碼注釋掉,就沒有報錯了。
運行起來后,在地址欄后加上/swagger,就可以自動跳轉到對應的頁面了。
集成到項目中報錯:Not supported by Swagger 2.0: Multiple operations with path 'api/Blob' and method 'POST'. See the config setting - \"ResolveConflictingActions\" for a potential workaround
參考資料:Not supported by Swagger 2.0: Multiple operations with path
webapi 配置swagger出現問題:not supported by swagger 2.0
在代碼
GlobalConfiguration.Configuration .EnableSwagger(c => { ...
里面加上一句:
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.ToList().First());
或者
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
哪個不報錯就用哪個,自己看情況。加上之后就不報這個錯誤了,就成功的運行出來了。
2019.05.24 補充:
如何生成注釋文檔?參考資料:代碼注釋生成
2020.03.23 補充:
如何添加header驗證?
GlobalConfiguration.Configuration .EnableSwagger(c => { c.OperationFilter<HttpHeaderFilter>(); }
public class HttpHeaderFilter : IOperationFilter { public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) { if (operation.parameters == null) operation.parameters = new List<Parameter>(); var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline(); //判斷是否添加權限過濾器 var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Instance).Any(filter => filter is IAuthorizationFilter); //判斷是否允許匿名方法 var allowAnonymous = apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any(); if (isAuthorized && !allowAnonymous) { operation.parameters.Add(new Parameter { name = "Authorization", @in = "header", description = "Token", required = true, type = "string" }); } } }