Swagger如何訪問Ocelot中帶許可權驗證的API

来源:https://www.cnblogs.com/axzxs2001/archive/2018/07/02/9253495.html
-Advertisement-
Play Games

Swagger作為WebAPI的文檔工具,廣為人知,Swagger對asp.net core的支持也幾近完美,這篇博文不是對asp.net core中使用Swagger作介紹,因為社區博客作了詳細說明。 今天主要說一下Swagger在Ocelot網關許可權驗證模式下的訪問,以及Swagger請求應答的... ...


先亮源代碼:https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/SwaggerDemo

這篇博文不是對asp.net core中使用Swagger作介紹,因為社區博客作了詳細說明。

今天主要說一下Swagger在Ocelot網關許可權驗證模式下的訪問,以及Swagger請求應答的數據格式。

首先創建四個項目:

SwaggerOcelot:asp.net core web api類型,api網關項目

SwaggerAuthorize:asp.net core web api類型,用戶驗證項目

SwaggerAPI01:asp.net core web api類型,api 1項目

SWaggerAPI02:asp.net core web api類型,api 2項目

首先在四個項目中添加基於Jwt的Toekn認證,參見https://www.cnblogs.com/axzxs2001/p/9250588.html

再在四個項目Nuget中引入Swashbuckle.AspNetCore,我的Demo中用的是2.5.0,再分別配置Swagger

 SwaggerAuthorize  Starup.cs配置

 1 public void ConfigureServices(IServiceCollection services)
 2 {
 3     services.AddTokenJwtAuthorize();
 4     services.AddMvc()
 5             .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
 6     services.AddSwaggerGen(options =>
 7     {
 8         options.SwaggerDoc("SwaggerAuthorize", new Info { Title = "Authorize", Version = "v1", Contact = new Contact { Email = "[email protected]", Name = "Authorize", Url = "http://0.0.0.0" }, Description = "Authorize項目" });
 9         var basePath = PlatformServices.Default.Application.ApplicationBasePath;
10         var xmlPath = Path.Combine(basePath, "SwaggerAuthorize.xml");
11         options.IncludeXmlComments(xmlPath);
12     });
13 }
14 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
15 {
16     if (env.IsDevelopment())
17     {
18         app.UseDeveloperExceptionPage();
19     }
20  
21     app.UseMvc()
22         .UseSwagger(options =>
23         {
24             options.RouteTemplate = "{documentName}/swagger.json";
25         })
26         .UseSwaggerUI(options =>
27         {
28             options.SwaggerEndpoint("/SwaggerAuthorize/swagger.json", "Authorize");
29         });
30 }

SwaggerAPI01,SwaggerAPI02類似,Starup.cs配置,其中讓Swagger支付Token驗證,就是要在這部分添加Swagger配置

 1 public void ConfigureServices(IServiceCollection services)
 2 {
 3     services.AddApiJwtAuthorize((context) =>
 4     {
 5         return true;
 6     });
 7  
 8     services.AddSwaggerGen(options =>
 9     {
10         options.SwaggerDoc("SwaggerAPI01", new Info { Title = "API01", Version = "v1", Contact = new Contact { Email = "[email protected]", Name = "API01", Url = "http://0.0.0.0" }, Description = "API01項目" });
11         var basePath = PlatformServices.Default.Application.ApplicationBasePath;
12         var xmlPath = Path.Combine(basePath, "SwaggerAPI01.xml");
13         options.IncludeXmlComments(xmlPath);
14  
15         //這裡是給Swagger添加驗證的部分
16         options.AddSecurityDefinition("Bearer", new ApiKeyScheme { In = "header", Description = "請輸入帶有Bearer的Token", Name = "Authorization", Type = "apiKey" });
17         options.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>> {
18             {
19                 "Bearer",
20                 Enumerable.Empty<string>()
21             }
22         });
23     });
24     services
25         .AddMvc()
26         .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
27 }
28  
29 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
30 {
31     app.UseMvc()
32         .UseSwagger(options =>
33         {
34             options.RouteTemplate = "{documentName}/swagger.json";
35         })
36         .UseSwaggerUI(options =>
37         {
38             options.SwaggerEndpoint("/SwaggerAPI01/swagger.json", "API01");
39         });
40 }

SwaggerOcelot,Starup.cs配置

 1 public void ConfigureServices(IServiceCollection services)
 2 {
 3     services.AddOcelotJwtAuthorize();
 4     //註入Ocelot
 5     services.AddOcelot(Configuration);
 6     services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
 7  
 8     services.AddSwaggerGen(options =>
 9     {
10         options.SwaggerDoc("ApiGateway", new Info { Title = "網關服務", Version = "v1", Contact = new Contact { Email = "[email protected]", Name = "SwaggerOcelot", Url = "http://10.10.10.10" }, Description = "網關平臺" });
11     });
12 }
13  
14 public async void Configure(IApplicationBuilder app, IHostingEnvironment env)
15 {
16     if (env.IsDevelopment())
17     {
18         app.UseDeveloperExceptionPage();
19     }
20  
21     var apis = new Dictionary<string, string>(
22         new KeyValuePair<string, string>[] {
23             KeyValuePair.Create("SwaggerAuthorize", "Authorize"),
24             KeyValuePair.Create("SwaggerAPI01", "API01"),
25             KeyValuePair.Create("SwaggerAPI02", "API02")
26         });
27  
28     app.UseMvc()
29        .UseSwagger()
30        .UseSwaggerUI(options =>
31        {
32            apis.Keys.ToList().ForEach(key =>
33            {
34                options.SwaggerEndpoint($"/{key}/swagger.json", $"{apis[key]} -【{key}】");
35            });
36            options.DocumentTitle = "Swagger測試平臺";
37        });
38     await app.UseOcelot();
39 }

接下來,為Swagger訪問Web API項目,添加請求返回格式,預設狀況下,Swagger是支持Json的,下來添加支持XML格式

第一步,添加支持XML格式

1 services.AddMvc()
2                   .AddXmlSerializerFormatters() //設置支持XML格式輸入輸出
3                   .AddJsonOptions(op => op.SerializerSettings.ContractResolver = new DefaultContractResolver())//大小寫不轉換
4                   .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

第二步,在對應的Action添加ProducesResponseType特性,為轉換作支持

1 [HttpGet("{id}")]
2 [ProducesResponseType(typeof(API01Model), 200)]
3 public ActionResult<API01Model> Get(int id)
4 {
5     return new API01Model { ID = 1, IsSure = true, Price = 2.3m, Describe = "test1" };
6 }

運行效果:

先看登錄

 

再看api訪問


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

-Advertisement-
Play Games
更多相關文章
  • 學習更多設計模式請參考:入門設計模式之彙總篇 狀態模式:允許一個對象在其內部狀態改變時改變其行為。 舉一個簡單的小例子,我們在對一個小姐姐搭訕的時候,根據小姐姐的心情如何我們可能會得到不同的回覆。 看一下類圖 看一下代碼: 如此,Boy持有不同狀態的Girl對象時獲取的回覆是不同的,這樣就實現了一個 ...
  • 一、String類 想要瞭解一個類,最好的辦法就是看這個類的實現源代碼,來看一下String類的源碼: public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** ...
  • 閱讀目錄: 1. 網關請求流程 2. Eureka 服務治理 3. Config 配置中心 4. Hystrix 監控 5. 服務調用鏈路 6. ELK 日誌鏈路 7. 統一格式返回 "Java 微服務框架選型(Dubbo 和 Spring Cloud?)" 目前公司使用的 Spring Cloud ...
  • 現在假設有如下構建的游戲伺服器,游戲伺服器有一組gate伺服器,用來驗證客戶端,並且通過gate伺服器來與一組主伺服器,然後主伺服器與關係伺服器進行通信。 其中relation伺服器用來處理各種關係,例如好友關係,師徒關係等。現在有一個玩家A添加玩家B為好友,那麼客戶端發送給服務端的消息流程如上所示 ...
  • 學習更多設計模式請參考:入門設計模式之彙總篇 備忘錄模式:在不破壞封裝的條件下,將一個對象的狀態捕捉住,併在外部化存儲起來,從而可以在將來合適的時候把這個對象還原到存儲時的狀態。 通常的備忘錄模式包含3個角色: 發起人角色:這個角色就是需要被保存狀態的角色 備忘錄角色:負責保存發起人角色的狀態的對象 ...
  • JDK的動態代理是必須掌握的,動態代理的好處就不用我多說了吧 :) 小弟最近在研究mybatis的源碼實現,就開始瞭解mybatis的Mapper代理機制,為什麼介面不用實現類也能代理? 好了,廢話不多說!!! 上代碼 下麵是測試結果: JDK的動態代理要有實現一個InvocationHandler ...
  • 學習更多設計模式請參考:入門設計模式之彙總篇 命令模式:把命令包裝成對象,將命令發送者和命令接受者的耦合降低 舉個例子,皇帝發聖旨招一個大臣入宮。 這裡的皇帝就是客戶端,而聖旨就是命令,大臣就是命令接受者。那麼命令發送者通常都是某個公公對吧。這裡就是一個命令模式的實踐,為什麼這樣說呢?平常我們寫代碼 ...
  • 學習更多設計模式請參考:入門設計模式之彙總篇 責任鏈模式:很多對象由每一個對象對其下家的引用而連接起來行成的一條鏈。 其實責任鏈模式一直在我們的身邊。某一天,董事長有個想法,他吩咐給了經理,經理吩咐給了組長,組長分配給了你我。這時候我們發現,我們沒有下級了呀,咋辦,那就乾唄。 上方這個任務分配的過程 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...