自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

你會(huì).Net之Swagger基礎(chǔ)使用嗎?

開(kāi)發(fā)
Swagger 是一個(gè)規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù)。日??梢杂糜诤蠖碎_(kāi)發(fā)人員測(cè)試接口或者前后端聯(lián)調(diào)使用。

[[399419]]

本文轉(zhuǎn)載自微信公眾號(hào)「鵬祥」,作者AZRNG。轉(zhuǎn)載本文請(qǐng)聯(lián)系鵬祥公眾號(hào)。

介紹

Swagger 是一個(gè)規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù)。日??梢杂糜诤蠖碎_(kāi)發(fā)人員測(cè)試接口或者前后端聯(lián)調(diào)使用。從.net5開(kāi)始,swagger已經(jīng)集成到vs2019編譯器中,可以通過(guò)勾對(duì)選項(xiàng)“啟用OpenAPI支持”顯示基本的swagger配置。

本文示例環(huán)境:vs2019、net5

1 基本使用

新建一個(gè)NetCore API項(xiàng)目,為了測(cè)試效果,我多創(chuàng)建幾個(gè)控制器

image.png

1.1 安裝組件

  1. <ItemGroup> 
  2.    <PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" /> 
  3.  </ItemGroup> 

 

1.2 注冊(cè)swagger服務(wù)

在ConfigureServices中

  1. public void ConfigureServices(IServiceCollection services) 
  2.     services.AddControllers(); 
  3.     services.AddSwaggerGen(c => 
  4.     { 
  5.         c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApi", Version = "v1" }); 
  6.     }); 

注意:

//netcore3.0之前版本用法

c.SwaggerDoc("v1", new Info { Title = "WebApi", Version = "v1" });

1.3 使用Swagger

  1. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 
  2.     if (env.IsDevelopment()) 
  3.     { 
  4.         app.UseDeveloperExceptionPage(); 
  5.         app.UseSwagger(); 
  6.         app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json""WebApi v1")); 
  7.     } 
  8.  
  9.     app.UseRouting(); 
  10.  
  11.     app.UseAuthorization(); 
  12.  
  13.     app.UseEndpoints(endpoints => 
  14.     { 
  15.         endpoints.MapControllers(); 
  16.     }); 

該示例代碼配置的swagger只在Development環(huán)境下顯示,可以根據(jù)實(shí)際情況來(lái)修改

1.4 啟動(dòng)

運(yùn)行項(xiàng)目,展示下面的效果

image.png

如果這是你寫(xiě)的接口,這個(gè)時(shí)候你的其他同事去看,真的會(huì)一臉懵逼,你這寫(xiě)的都是啥玩意,那么我們來(lái)給這加上注釋吧。

 

  1. /// <summary> 
  2. /// 用戶(hù)控制器 
  3. /// </summary> 
  4. [Route("api/[controller]")] 
  5. [ApiController] 
  6. public class UserController : ControllerBase 
  7.     /// <summary> 
  8.     ///查詢(xún)用戶(hù)列表 
  9.     /// </summary> 
  10.     /// <returns></returns
  11.     [HttpGet] 
  12.     public IEnumerable<string> Get() 
  13.     { 
  14.         return new string[] { "value1""value2" }; 
  15.     } 
  16.  
  17.     /// <summary> 
  18.     /// 查詢(xún)用戶(hù)詳情 
  19.     /// </summary> 
  20.     /// <param name="id"></param> 
  21.     /// <returns></returns
  22.     [HttpGet("{id}")] 
  23.     public string Get(int id) 
  24.     { 
  25.         return "value"
  26.     } 
  27.  
  28.     /// <summary> 
  29.     /// 刪除用戶(hù) 
  30.     /// </summary> 
  31.     /// <param name="id"></param> 
  32.     [HttpDelete("{id}")] 
  33.     public void Delete(int id) 
  34.     { 
  35.     } 

這樣子加了注釋還不行,swagger還讀取不到我們的注釋?zhuān)覀冞€需要生成xml文檔并且讓swagger使用,選中項(xiàng)目右鍵屬性=>生成=>xml文檔文件

image.png

修改注入swagger配置

  1. services.AddSwaggerGen(c => 
  2.    { 
  3.        c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApi", Version = "v1" }); 
  4.  
  5.        // 使用反射獲取xml文件。并構(gòu)造出文件的路徑 
  6.        var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"
  7.        var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); 
  8.        // 啟用xml注釋.第二個(gè)參數(shù)啟用控制器的注釋?zhuān)J(rèn)為false
  9.        c.IncludeXmlComments(xmlPath, true); 
  10.    }); 

再次啟動(dòng)項(xiàng)目查看界面

image.png

至此,基礎(chǔ)的配置swagger顯示注釋已經(jīng)實(shí)現(xiàn)了,那么如何調(diào)用我們接口那?

image.png

通過(guò)該界面,我們可以看到請(qǐng)求地址、請(qǐng)求方式、入?yún)㈩?lèi)型、輸出參數(shù)等。

注:

通過(guò)設(shè)置取消顯示警告:1591 , 可以去除方法和類(lèi)上面的xml注釋警告

如果實(shí)體類(lèi)不在當(dāng)前程序集下,需要同樣方式配置實(shí)體類(lèi)程序集的xml文檔到swagger配置

2. swagger傳遞JWT

jwt是一個(gè)基于json的、用于在網(wǎng)絡(luò)上聲明某種主張的令牌,通常是用三部分組成:頭信息,消息體,簽名。他是一種雙方之間傳遞安全信息的表述性聲明規(guī)范??梢宰鰴?quán)限驗(yàn)證的工具,但是目的不是為了數(shù)據(jù)加密和保護(hù)。雖然看似像是加密的數(shù)據(jù),但是它并沒(méi)有加密,不適合存儲(chǔ)機(jī)密信息。

如果我們接口是需要傳遞token才可以訪問(wèn),那么我們就需要對(duì)我們的swagger配置再進(jìn)行改造

  1. services.AddSwaggerGen(c => 
  2.             { 
  3.                 c.SwaggerDoc("v1", new OpenApiInfo {Title = "WebApi", Version = "v1"}); 
  4.  
  5.                 // 使用反射獲取xml文件。并構(gòu)造出文件的路徑 
  6.                 var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"
  7.                 var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); 
  8.                 // 啟用xml注釋.第二個(gè)參數(shù)啟用控制器的注釋?zhuān)J(rèn)為false
  9.                 c.IncludeXmlComments(xmlPath, true); 
  10.  
  11.                 var security = new Dictionary<string, IEnumerable<string>> {{"Bearer", new string[] { }}}; 
  12.                 c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme() 
  13.                 { 
  14.                     Description = "JWT授權(quán)(數(shù)據(jù)將在請(qǐng)求頭中進(jìn)行傳輸) 在下方輸入Bearer {token} 即可,注意兩者之間有空格"
  15.                     Name = "Authorization", //jwt默認(rèn)的參數(shù)名稱(chēng) 
  16.                     In = ParameterLocation.Header, //jwt默認(rèn)存放Authorization信息的位置(請(qǐng)求頭中) 
  17.                     Type = SecuritySchemeType.ApiKey, 
  18.                 }); 
  19.                 c.AddSecurityRequirement(new OpenApiSecurityRequirement 
  20.                 { 
  21.                     { 
  22.                         new OpenApiSecurityScheme 
  23.                         { 
  24.                             Reference = new OpenApiReference() 
  25.                             { 
  26.                                 Id = "Bearer"
  27.                                 Type = ReferenceType.SecurityScheme 
  28.                             } 
  29.                         }, 
  30.                         Array.Empty<string>() 
  31.                     } 
  32.                 }); 
  33.             }); 

運(yùn)行,查看界面,發(fā)現(xiàn)界面有所不同

image.png

雖然我手上沒(méi)有token,但是我也沒(méi)有寫(xiě)校驗(yàn)token的代碼,所以我們就暫且看為一個(gè)頭部傳遞的工具使用。jwt具體使用后續(xù)再講。

token傳遞方式就是在Headers增加 Authorization:Bearer {token} ,然后需要在程序中配置校驗(yàn)token,當(dāng)下我們只是模擬swagger在header中傳遞值。

在輸入框輸出:Bearer AABBCC

在Action中獲取我們傳輸?shù)臄?shù)據(jù)

  1. var token = HttpContext.Request.Headers["Authorization"]; 

image.png

3 參考文檔

 

https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/web-api-help-pages-using-swagger?view=aspnetcore-5.0

 

責(zé)任編輯:武曉燕 來(lái)源: 鵬祥
相關(guān)推薦

2024-06-07 09:13:23

2025-01-09 07:50:34

.NET 9ScalarSwagger

2023-09-19 08:28:32

DiagramsPython工具

2021-08-19 15:36:09

數(shù)據(jù)備份存儲(chǔ)備份策略

2021-01-07 07:39:07

工具接口 Swagger

2021-09-12 17:25:12

SQLite數(shù)據(jù)庫(kù)

2024-02-22 08:31:26

數(shù)據(jù)恢復(fù)工具MySQL回滾SQL

2012-06-20 10:47:25

Team Leader

2019-05-07 15:49:27

AI人工智能藝術(shù)

2021-04-14 06:53:52

C# 修飾符 Public

2021-04-16 15:02:11

CAP理論分布式

2013-09-05 11:18:58

.NetWeb

2023-06-26 08:20:02

openapi格式注解

2010-07-13 10:40:30

唐駿

2019-07-17 15:45:24

Spark內(nèi)存Java

2011-09-30 13:37:35

51CTO博客一周熱門(mén)薪酬

2022-03-25 09:39:50

LinuxLinux top

2021-11-05 10:59:06

元編程語(yǔ)言工具

2021-09-11 19:04:38

.NetSoapCore協(xié)議

2024-05-14 08:19:54

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)