Asp.Net Core中使用Swagger,你不得不踩的坑

来源:https://www.cnblogs.com/gdsblog/archive/2018/07/08/9279814.html
-Advertisement-
Play Games

Asp.Net Core中使用Swagger,你不得不踩的坑 ...


  很久不來寫blog了,換了新工作後很累,很忙。每天常態化加班到21點,偶爾還會到凌晨,加班很累,但這段時間,也確實學到了不少知識,今天這篇文章和大家分享一下:Asp.Net Core中使用Swagger,你不得不踩的坑.

 這篇文章著重講幾點:

  • swagger 跨層註釋問題
  • swagger Get請求傳多個參數的問題
  • swagger Enum 註釋問題
  • swagger api文檔版本控制

第一步:搭建一個webapi項目或者mvc項目,引入swagger nuget

我創建項目,習慣性的先創建一個解決方案,取名為TB.AspNetCore.Swagger

 

接著會在解決方案上新建項目,取名TB.AspNetCore.Swagger.SApi,然後選擇webapi,https最好去掉,加上後提示你要證書什麼的,還會提示你網站不安全,我們做測試,沒必要勾選

為了本項目問題的說明,我們會繼續在常見三個類庫項目TB.AspNetCore.Swagger.Data 放資料庫實體,TB.AspNetCore.Swagger.Model 放模型-ViewModel,TB.AspNetCore.Swagger.Enum 放枚舉類型

 

 

刪除項目預設生成的class和controller,在api項目上引入swagger的nuget包,搜索:Swashbuckle.AspNetCore,這個包就在持續更新速度很快,已經到了3.0

第二部:引入版本控制nuget,添加關鍵性配置代碼

 

這兩個包是做版本控制管理的,如果不需要可以不添加,這裡我做演示就添加上,額外再引入一個包Microsoft.Extensions.PlatformAbstractions,這個包是獲取一些系統配置路徑變數的包,這個包實在雞肋,沒有註釋。。添加部分關鍵代碼在configuration和configurationservice,代碼如下:

 

services.AddSwaggerGen(
                options =>
                {
                    // resolve the IApiVersionDescriptionProvider service
                    // note: that we have to build a temporary service provider here because one has not been created yet
                    var provider = services.BuildServiceProvider().GetRequiredService<IApiVersionDescriptionProvider>();

                    // add a swagger document for each discovered API version
                    // note: you might choose to skip or document deprecated API versions differently
                    foreach (var description in provider.ApiVersionDescriptions)
                    {
                        options.SwaggerDoc(description.GroupName, CreateInfoForApiVersion(description));
                    }

                    // add a custom operation filter which sets default values
                    options.OperationFilter<SwaggerDefaultValues>();

                    //
                    // integrate xml comments
                    options.IncludeXmlComments(XmlCommentsFilePath);
                    options.IncludeXmlComments(XmlModelsFilePath);
                });

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApiVersionDescriptionProvider provider)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();

            //Swagger
            app.UseSwagger();
            app.UseSwaggerUI(
                options =>
                {
                    foreach (var description in provider.ApiVersionDescriptions)
                    {
                        options.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());
                    }
                });
        }

第三部:新建控制器,測試我們的項目

我做了一個訂單查詢控制器,一個提交訂單,一個查詢訂單,查詢訂單為get請求多參數,提交訂單為post請求,其中的備註設計到枚舉類型的如何載入

代碼如下:

 

namespace TB.AspNetCore.Swagger.SApi.Controllers
{
    [Produces("application/json")]
    [ApiVersion("1.0", Deprecated = false)]
    [Route("api/v{api-version:apiVersion}/[controller]/[action]")]
    [ApiController]
    public class OrderController : ControllerBase
    {
        /// <summary>
        /// 查詢訂單
        /// </summary>
        /// <param name="orderCode">訂單號</param>
        /// <param name="orderName">訂單名稱</param>
        /// <returns></returns>
        [HttpGet("{orderCode}/{orderName}")]
        public OrderModel QueryOrder(string orderCode, string orderName)
        {
            OrderModel model = new OrderModel
            {

                OrderCode = orderCode

            };
            return model;
        }

        /// <summary>
        /// 提交訂單
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public OrderModel SubOrder([FromBody]OrderModel model)
        {
            return model;
        }
    }

    public class OrderModel
    {
        /// <summary>
        /// 訂單號
        /// </summary>
        public string OrderCode { get; set; }

        /// <summary>
        /// 訂單金額
        /// </summary>
        public decimal OrderAmount { get; set; }

        /// <summary>
        /// 訂單類型
        /// <Remark>
        /// 0 商家入駐
        /// 1 線下交易
        /// </Remark>
        /// </summary>
        public OrderTypeInfo OrderType { get; set; }

    }

    /// <summary>
    /// 
    /// </summary>
    public enum OrderTypeInfo
    {
        /// <summary>
        /// 商家入駐
        /// </summary>
        [Description("商家入駐")]
        StoreEntry = 0,
        /// <summary>
        /// 線下交易
        /// </summary>
        [Description("線下交易")]
        StoreTrade = 1,

    }
}

 效果圖如下:**我把model和enum寫到一個文件里,如果分別跨層寫的話,也沒有什麼問題,只需要在startp里配置一下,由於時間關係,源碼我上傳到我都github,就不再細分了

 

github地址:https://github.com/TopGuo/TB.AspNetCore.Swagger

如果您認為這篇文章還不錯或者有所收穫,您可以點擊右下角的【推薦】按鈕精神支持,因為這種支持是我繼續寫作,分享的最大動力

歡迎大家關註我都我的微信 公眾號,公眾號漲粉絲人數,就是你們對我的喜愛程度!

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本篇描述一些常用的資料庫操作,包括:條件查詢、排序、分頁、事務等基本資料庫操作。試驗的資料庫為MySQL。 ...
  • 1、首先新建一個webAPI項目做為IdentityServer的服務端,提供生成Token的服務,首先修改Startup.cs文件,如下圖: 2、增加一個Config.cs文件,以便於提供資源和認證設置,如下圖: 3、在Startup.cs文件中配置做初始化: 4、好了,我們把網站啟動,然後我們訪 ...
  • 本文目標是指引從未使用過Linux的.Neter,如何在CentOS7上安裝.Net Core環境,以及部署.Net Core應用。 ...
  • 說明 Swagger是一個WebAPI線上註解、調試插件,過去我們主要通過手工撰寫WebAPI介面的交互文檔供前端開發人員或外部開發者, 官網地址:https://swagger.io/。 但是在實際工作中,往往咋們的文檔工作通常落後於實際的環境,導致文檔和實際介面不一致,前後端開發人員苦不堪言。 ...
  • 打開cmd,依次輸入mkdir .project(創建目錄),cd .\.project(進入目錄),dotnet new(新建初始項目),dotnet restore(還原依賴),dotnet run(運行)即可運行第一個Hello World程式 1.為 .NET Core 項目創建文件夾,併進 ...
  • qMISPlat V2.1版重點增加數據統計、表單許可權、流程表單許可權、流程表單數據初始化等方面的功能,並於2018-7-8號正式發佈。新版特性如下: 一、平臺整體遷移到.net core 2.1 二、增加全新數據統計版塊 1、以eCharts為基礎,支持通過編寫SQL語句配置多系列餅圖、柱狀圖和折線 ...
  • 1. 前言 .NET發行至今已經過了十四個年頭。隨著版本的不斷迭代更新,.NET在Windows平臺上的表現也是越來越好,可以說Windows平臺上所有的應用類型.NET幾乎都能完成。 只是成也Windows,敗也Windows,這十四年來,除了部分“民間”版本,.NET一直沒能在官方支持下擺脫Wi ...
  • 個人見解,歡迎交流,不喜勿噴。 微信小程式相比於微信公眾號的開發,區別在於微信小程式只請求第三方的數據,整個界面的交互(view)還是在微信小程式上實現,而微信公眾號的開發,是直接請求第三方的web界面。所以說微信小程式更輕量級,用來做一些餐飲店線上點單,小小的網上商城什麼的,還是很方便的,不過有一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...