国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - asp.net core 3.0中使用swagger的方法與問題

asp.net core 3.0中使用swagger的方法與問題

2020-06-19 13:59WeihanLi ASP.NET教程

這篇文章主要給大家介紹了關(guān)于asp.net core 3.0中使用swagger的方法與遇到的一些問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用asp.net core 3.0具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

Intro#

上次更新了 asp.net core 3.0 簡單的記錄了一下 swagger 的使用,那個項目的 api 比較簡單,都是匿名接口不涉及到認證以及 api 版本控制,最近把另外一個 api 項目升級到了 3.0,還是遇到了一些問題,這里單獨寫一篇文章介紹,避免踩坑。

Swagger 基本使用#

swagger 服務注冊:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
services.AddSwaggerGen(option =>
 {
 option.SwaggerDoc("sparktodo", new OpenApiInfo
 {
  Version = "v1",
  Title = "SparkTodo API",
  Description = "API for SparkTodo",
  Contact = new OpenApiContact() { Name = "WeihanLi", Email = "weihanli@outlook.com" }
 });
 
 // include document file
 option.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, $"{typeof(Startup).Assembly.GetName().Name}.xml"), true);
 });

中間件配置:

?
1
2
3
4
5
6
7
8
9
10
//Enable middleware to serve generated Swagger as a JSON endpoint.
app.UseSwagger();
//Enable middleware to serve swagger-ui (HTML, JS, CSS etc.), specifying the Swagger JSON endpoint
app.UseSwaggerUI(option =>
{
 option.SwaggerEndpoint("/swagger/sparktodo/swagger.json", "sparktodo Docs");
 
 option.RoutePrefix = string.Empty;
 option.DocumentTitle = "SparkTodo API";
});

為 Swagger 添加 Bearer Token 認證#

  1. services.AddSwaggerGen(option => 
  2.  // ... 
  3.  
  4.  // Add security definitions 
  5.  option.AddSecurityDefinition("Bearer"new OpenApiSecurityScheme() 
  6.  { 
  7.  Description = "Please enter into field the word 'Bearer' followed by a space and the JWT value"
  8.  Name = "Authorization"
  9.  In = ParameterLocation.Header, 
  10.  Type = SecuritySchemeType.ApiKey, 
  11.  }); 
  12.  option.AddSecurityRequirement(new OpenApiSecurityRequirement 
  13.  { 
  14.  { new OpenApiSecurityScheme 
  15.  { 
  16.   Reference = new OpenApiReference() 
  17.   { 
  18.   Id = "Bearer"
  19.   Type = ReferenceType.SecurityScheme 
  20.   } 
  21.  }, Array.Empty<string>() } 
  22.  }); 
  23. }); 

支持多個 ApiVersion#

  1. services.AddApiVersioning(options => 
  2.  { 
  3.  options.AssumeDefaultVersionWhenUnspecified = true
  4.  options.DefaultApiVersion = ApiVersion.Default; 
  5.  options.ReportApiVersions = true
  6.  }); 
  7.  
  8. services.AddSwaggerGen(option => 
  9.  // ... 
  10.  
  11.  option.SwaggerDoc("v1"new OpenApiInfo { Version = "v1", Title = "API V1" }); 
  12.  option.SwaggerDoc("v2"new OpenApiInfo { Version = "v2", Title = "API V2" }); 
  13.  
  14.  option.DocInclusionPredicate((docName, apiDesc) => 
  15.  { 
  16.  var versions = apiDesc.CustomAttributes() 
  17.   .OfType<ApiVersionAttribute>() 
  18.   .SelectMany(attr => attr.Versions); 
  19.  
  20.  return versions.Any(v => $"v{v.ToString()}" == docName); 
  21.  }); 
  22.  
  23.  option.OperationFilter<RemoveVersionParameterOperationFilter>(); 
  24.  option.DocumentFilter<SetVersionInPathDocumentFilter>(); 
  25. }); 
 

自定義 Api version 相關(guān)的 OperationFilter:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class SetVersionInPathDocumentFilter : IDocumentFilter
{
 public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
 {
 var updatedPaths = new OpenApiPaths();
 
 foreach (var entry in swaggerDoc.Paths)
 {
  updatedPaths.Add(
  entry.Key.Replace("v{version}", swaggerDoc.Info.Version),
  entry.Value);
 }
 
 swaggerDoc.Paths = updatedPaths;
 }
}
 
public class RemoveVersionParameterOperationFilter : IOperationFilter
{
 public void Apply(OpenApiOperation operation, OperationFilterContext context)
 {
 // Remove version parameter from all Operations
 var versionParameter = operation.Parameters.Single(p => p.Name == "version");
 operation.Parameters.Remove(versionParameter);
 }
}

中間件配置:

?
1
2
3
4
5
6
7
8
9
10
11
//Enable middleware to serve generated Swagger as a JSON endpoint.
app.UseSwagger();
//Enable middleware to serve swagger-ui (HTML, JS, CSS etc.), specifying the Swagger JSON endpoint
app.UseSwaggerUI(option =>
{
 option.SwaggerEndpoint("/swagger/v2/swagger.json", "V2 Docs");
 option.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs");
 
 option.RoutePrefix = string.Empty;
 option.DocumentTitle = "SparkTodo API";
});

最終 swagger 效果

asp.net core 3.0中使用swagger的方法與問題

asp.net core 3.0中使用swagger的方法與問題

Memo#

上面的配置來自 https://github.com/WeihanLi/SparkTodo 這個項目,要獲取代碼可以參考這個項目

Reference#

  • https://github.com/domaindrivendev/Swashbuckle.AspNetCore/tree/master/test/WebSites/MultipleVersions/Swagger
  • https://stackoverflow.com/questions/58197244/swaggerui-with-netcore-3-0-bearer-token-authorization
  • https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1295
  • https://github.com/WeihanLi/SparkTodo

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。

原文鏈接:https://www.cnblogs.com/weihanli/p/ues-swagger-in-aspnetcore3_0.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 黄色日本视频 | 亚洲欧美综合乱码精品成人网 | 亚洲国产精品久久久久婷婷老年 | 国产午夜精品久久久久久久 | 亚洲色吧| 中文字幕亚洲一区 | 国产欧美网址 | 亚洲在线电影 | 国产精品久久久久久久久图文区 | 成年人黄色免费视频 | 免费簧片| 国产一区二区精品在线观看 | 天天澡天天狠天天天做 | 免费看黄色电影 | 亚洲综合首页 | 国内精品一区二区 | 99久久成人 | 欧美一级电影在线 | 日韩精品专区 | 日韩中文字幕 | 成人精品| 国产一级纯肉体一级毛片 | 国产精品日韩高清伦字幕搜索 | 国产午夜一区二区三区 | 欧美一级在线 | 日韩精品视频一区二区三区 | 午夜天堂精品久久久久 | 在线视频国产一区 | 欧美在线小视频 | 欧美日韩激情在线 | 国产精品1区2区 | 国产97色在线 | 亚洲 | 久久99er6热线精品首页蜜臀 | 淫片在线观看 | 一区二区三区国产视频 | 国产欧美精品区一区二区三区 | 一区二区三区欧美在线 | 91麻豆精品国产91久久久资源速度 | 久久综合一区二区 | 日韩精品在线免费视频 | 99久久精品国产一区二区三区 |