webapi 集成swagger


參考資料: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" });
            }
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM