ABP項目中使用Swagger生成動態WebAPI

来源:http://www.cnblogs.com/changyou7/archive/2016/11/29/6114534.html
-Advertisement-
Play Games

本文是根據角落的白板報的《使用ABP實現SwaggerUI,生成動態webapi》一文的學習總結,感謝原文作者角落的白板報。 1 安裝Swashbuckle.core 1.1 選擇WebApi項目,右鍵“管理NuGet程式包”。 1.2 輸入 “Swashbuckle.core”,搜索。選擇Swas ...


本文是根據角落的白板報的《使用ABP實現SwaggerUI,生成動態webapi》一文的學習總結,感謝原文作者角落的白板報

 

1 安裝Swashbuckle.core

1.1 選擇WebApi項目,右鍵“管理NuGet程式包”。

 

1.2 輸入 “Swashbuckle.core”,搜索。選擇Swashbuckle.core,右邊點擊安裝。

 

 2 配置Swashbuckle

 2.1 打開WebApi項目中的DemoWebApiModule.cs文件。創建ConfigureSwaggerUI()方法,併在Initialize()中調用。

public void ConfigureSwaggerUI()
{
    Configuration.Modules.AbpWebApi().HttpConfiguration
        .EnableSwagger(c =>
        {
            c.SingleApiVersion("v1", "DemoAPI文檔");
            c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
        })
        .EnableSwaggerUi();
}
public override void Initialize()
{
    IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());

    Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder
        .ForAll<IApplicationService>(typeof(DemoApplicationModule).Assembly, "app")
        .Build();

    Configuration.Modules.AbpWebApi().HttpConfiguration.Filters.Add(new HostAuthenticationFilter("Bearer"));

    ConfigureSwaggerUI();
}

 

2.2 運行項目。

運行項目,打開地址“/swagger/ui/index”,即可查看WebApi。

 

3 增強WebApi文檔

3.1 打開Application項目的屬性設置,勾選“XML文檔文件”。

 

 3.2 將application層中的註釋添加到SwaggerUI中。

 1 public void ConfigureSwaggerUI()
 2 {
 3     Configuration.Modules.AbpWebApi().HttpConfiguration
 4         .EnableSwagger(c =>
 5         {
 6             c.SingleApiVersion("v1", "DemoAPI文檔");
 7             c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
 8 
 9             //將application層中的註釋添加到SwaggerUI中
10             var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
11 
12             var commentsFileName = "Bin//Demo.Application.xml";
13             var commentsFile = Path.Combine(baseDirectory, commentsFileName);
14             //將註釋的XML文檔添加到SwaggerUI中
15             c.IncludeXmlComments(commentsFile);
16         })
17         .EnableSwaggerUi();
18 }

3.3 在API介面方法中添加註釋後,SwaggerUI就會顯示對應的註釋信息。以Role為例,添加註釋如下:

UpdateRolePermissionsInput.cs

/// <summary>
/// 修改角色許可權信息接收的DTO
/// </summary>
public class UpdateRolePermissionsInput
{
    /// <summary>
    /// 角色ID
    /// </summary>
    [Range(1, int.MaxValue)]
    public int RoleId { get; set; }

    /// <summary>
    /// 獲取許可權名稱列表
    /// </summary>
    [Required]
    public List<string> GrantedPermissionNames { get; set; }
}

IRoleAppService.cs

/// <summary>
/// 角色信息介面
/// </summary>
public interface IRoleAppService : IApplicationService
{
    /// <summary>
    /// 修改角色的許可權信息
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task UpdateRolePermissions(UpdateRolePermissionsInput input);
}

3.4 再次運行項目,可以看到WebApi文檔出現了註釋信息。

 

4 修改訪問方式

4.1 使用EnableSwaggerUi的重載方法。

SwaggerUI預設使用的是EnableSwaggerUi()方法,訪問路徑預設為“/swagger/ui/index/”。 F12轉到定義,我們可以看到EnableSwaggerUi有一個重載方法。

public void EnableSwaggerUi(Action<SwaggerUiConfig> configure = null);
public void EnableSwaggerUi(string routeTemplate, Action<SwaggerUiConfig> configure = null);

ConfigureSwaggerUI中更改EnableSwaggerUi()為:

EnableSwaggerUi("apis/{*assetPath}");

 

4.2 更改後的訪問路徑變為"apis/index",運行程式,查看。

 

5 界面優化

5.1 調整界面CSS樣式

(1)新建style.css樣式文件,可以自定義文件名。

(2)style.css中編輯樣式腳本,以下為示例:

.swagger-section #header {
    background-color: #ff6a00;
    padding: 14px;
}

(3)style.css文件屬性設置為“嵌入的資源”。   非常重要!!!

 

(4)修改ConfigureSwaggerUI方法。

EnableSwaggerUi("apis/{*assetPath}", c=>
        {
            c.InjectStylesheet(Assembly.GetExecutingAssembly(),
                "Demo.SwaggerUI.css.style.css");
        });

其中,Demo為項目命名空間,Demo以後的為文件夾或文件。 

 

(5)預覽效果,可以看到header背景色由預設的綠色改為了橙色。

 

 

 5.2 漢化

操作與5.1相似。

(1)新建swagger.js文件,可以自定義文件名。

 

(2)編輯swagger.js。

$(function () {

    $("#logo").text("Demo");
    $("#logo").attr("href", "http://www.Demo.com");

    $("#explore").text("查詢");

    $(".options .toggleEndpointList").each(function () {
        $(this).text("展開/隱藏");
    });
    $(".options .collapseResource").each(function () {
        $(this).text("顯示資源列表");
    });

    $(".options .expandResource").each(function () {
        $(this).text("顯示資源明細");
    });

    $(".operations .description-link").each(function () {
        $(this).text("實體模型");
    });

    $(".operations .snippet-link").each(function () {
        $(this).text("實體類型");
    });

    $(".operations .response-content-type label").each(function () {
        $(this).text("請求方式");
    });
    $(".operations .sandbox h4").each(function () {
        $(this).text("參數列表");
    });

    $(".operations .response_hider").each(function () {
        $(this).text("隱藏響應界面");
    });
    $(".operations .response .curl").each(function () {
        $(this).text("請求頭");
    });

    $(".operations .response .curl").each(function () {
        $(this).next().text("請求路徑");
    });

    $(".response_body").each(function () {
        $(this).prev().text("響應正文");
    });

    $("[class='block response_code']").each(function () {
        $(this).prev().text("響應代碼");
    });

    $("[class='block response_headers']").each(function () {
        $(this).prev().text("響應標頭");
    });

    $(".parameter-content-type div label").each(function () {
        $(this).text("參數的內容類型︰");
    });

    $("small.notice").each(function () {
        $(this).text("單擊要設置為參數值");
    });

    $(".body-textarea").each(function () {
        var op = $(this).attr("placeholder");

        if (op === "(required)") {
            $(this).attr("placeholder", "(不可為空)");
        }
    });

    $(".body-textarea required");

    $(".fullwidth thead tr th").each(function () {
        var key = $(this).text();
        switch (key) {
            case "Parameter":
                $(this).text("參數名");
                break;
            case "Value":
                $(this).text("參數值");
                break;
            case "Description":
                $(this).text("描述");
                break;
            case "Parameter Type":
                $(this).text("參數類型");
                break;
            case "Data Type":
                $(this).text("數據類型");
                break;

            default:
                break;
        }
    });

    $("input[type='submit']").val("測試");
})

 其中,logo換成了文字“Demo”,logo的鏈接換成了“http://www.Demo.com”。可根據實際修改。

(3)swagger.js文件屬性設置為“嵌入的資源”。

(4)修改ConfigureSwaggerUI方法。

EnableSwaggerUi("apis/{*assetPath}", c=>
        {
            c.InjectStylesheet(Assembly.GetExecutingAssembly(),
                "Demo.SwaggerUI.css.style.css");
            c.InjectJavaScript(Assembly.GetExecutingAssembly(),
                "Demo.SwaggerUI.script.swagger.js");
        });

其中,Demo為項目命名空間,Demo以後的為文件夾或文件。

 

(5)預覽效果。

 

 後記:

       在整個過程中,我遇到的問題是,css文件和js文件設置未生效。琢磨了很久,根本原因是未設置文件屬性為“嵌入的資源”!牢記這一步!

 

 本節源碼鏈接:http://pan.baidu.com/s/1nuZHJvz 密碼:a0tu

 

 

 

 

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

-Advertisement-
Play Games
更多相關文章
  • 1.DriverManager用來建立和資料庫的鏈接以及管理JDBC驅動程式 driverManager的常用方法 2.Connection代表Java程式和資料庫的連接 Connection的常用方法 3.Statement用來執行靜態的SQL語句。例如:對於insert,update和delet ...
  • 本視頻為activiti工作流的web流程設計器整合視頻教程 整合Acitiviti線上流程設計器(Activiti-Modeler 5.21.0 官方流程設計器) 本視頻共講了兩種整合方式 1. 流程設計器和其它工作流項目分開部署的方式 2. 流程設計器和SSM框架項目整合在一起的方式 視頻大小 ...
  • 多個中斷源在它們的搶占式優先順序相同的情況下,子優先順序不論是否相同,如果某個中斷已經在服務當中,則其它中斷源都不能打斷它;只有搶占式優先順序高的中斷才可以打斷其它搶占式優先順序低的中斷。 就是說, 組優先順序不同的時候高優先順序可以搶占低優先順序進程。 組優先順序相同的時候,子優先順序不能搶占。 ...
  • A 調用攝像頭拍照,自定義裁剪編輯頭像 B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,開發利器)+快速構建表單; 技術:313596790freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本,處理類,service等完整模塊C 集成阿裡巴巴資料庫連 ...
  • 分散式學習系列【dubbo實踐】 dubbo架構 組成部分:provider,consumer,registry,monitor; provider,consumer註冊,訂閱類似於消息隊列的註冊訂閱 一、環境安裝 1、dubbo admin 管理控制台安裝(Windows環境) #下載dubbo- ...
  • HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服務端組件、客戶端組件和 Agent 組件,廣泛適用於各種不同應用場景的 TCP/UDP/HTTP 通信系統,提供 C/C++、C#、Delphi、E(易語言)、Java、Python 等編程語言介面。HP-Socket ...
  • 閱讀目錄 前言 如何在一個項目中實現多個上下文的業務 售價上下文與購買上下文的集成 結語 一、前言 前幾篇已經實現了一個最簡單的購買過程,這次開始往這個過程中增加一些東西。比如促銷、會員價等,在我們的第一篇文章(如何一步一步用DDD設計一個電商網站(一)—— 先理解核心概念)中規劃的上下文映射圖可以 ...
  • 簡介 Consul-template是Consul的一個方擴展工具,通過監聽Consul中的數據可以動態修改一些配置文件,大家比較熱衷於應用在Nginx,HAProxy上動態配置健康狀態下的客戶端反向代理信息。GitHub上的文檔比較詳細,這裡簡單做個入門介紹。 關於配置中心不做過多介紹了。簡單描述 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...