Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
安装
1
| dotnet add package Swashbuckle.AspNetCore
|
配置
Startup.cs
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 27 28 29 30 31 32
| public void ConfigureServices(IServiceCollection services) { option.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "CoreWebApi", Description = "Document Api", Contact = new OpenApiContact { Name = "acgog", Email = "sacgog@aliyun.com", Url =new Uri("https://www.acgog.cn") } }); var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); option.IncludeXmlComments(xmlPath, true); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "CoreWebApi"); c.RoutePrefix = "swagger"; }); }
|
启用XML注释
启用XML注释之后可以轻松映射到UI界面方便前端开发人员理解。
编辑****.csproj
1 2 3 4
| <PropertyGroup> <GenerateDocumentationFile>true</GenerateDocumentationFile> <NoWarn>$(NoWarn);1591</NoWarn> </PropertyGroup>
|
这两句的大概意思就是启用XML注释,并忽略未写注释的警告。
不添加1591如果某个方法未写 “///“各式的注释,vs会有警示的消息。
JWT Authorize 验证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| services.AddSwaggerGen(s => { s.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); s.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme() { Description = "在下框中输入请求头中需要添加Jwt授权Token:Bearer Token", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey, BearerFormat = "JWT", Scheme = "Bearer" }); s.AddSecurityRequirement(new OpenApiSecurityRequirement{ { new OpenApiSecurityScheme{ Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer"} },new string[] { } } }); });
|
版本控制
nuget
1
| Microsoft.AspNetCore.Mvc.Versioning
|
Startup
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
private IApiVersionDescriptionProvider provider; public void ConfigureServices(IServiceCollection services){
services.AddApiVersioning(option =>{ option.ReportApiVersions = true; option.AssumeDefaultVersionWhenUnspecified = true; option.DefaultApiVersion = new ApiVersion(1, 0); }).AddVersionedApiExplorer(option => { option.GroupNameFormat = "'v'V"; option.AssumeDefaultVersionWhenUnspecified = true; }); services.AddSwaggerGen(c =>{ foreach (var item in provider.ApiVersionDescriptions) { c.SwaggerDoc(item.GroupName, new Info { Title = "CoreWebApi", Version = item.ApiVersion.ToString(), Description = "ASP.NET CORE WebApi", Contact = new Contact { Name = "acgog", Email = "sacgog@aliyun.com", Url =new Uri("https://www.acgog.cn") } }); } } this.provider = services.BuildServiceProvider().GetRequiredService<IApiVersionDescriptionProvider>();
} public void Configure(IApplicationBuilder app, IWebHostEnvironment env){
app.UseSwaggerUI(c => { foreach (var item in provider.ApiVersionDescriptions) { c.SwaggerEndpoint($"/swagger/{item.GroupName}/swagger.json", "CoreAPI"+item.ApiVersion); } c.RoutePrefix = string.Empty; }); }
[ApiVersion("1.0")]
|
其他
注释
1 2 3 4 5 6 7 8 9 10 11 12
|
public void Test(){
}
|