Swagger入门
对于新手来说,Swagger入门是十分容易的
1.首先添加nuget包,Swashbuckle.AspNetCore这一个就可以了
2.添加SwaggerConfig文件
////// SwaggerConfig /// public class SwaggerConfig { ////// /// /// public static void Register(IServiceCollection services) { services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApi", Version = "v1" }); var basePath = PlatformServices.Default.Application.ApplicationBasePath; c.IncludeXmlComments(Path.Combine(basePath, "Models.xml")); c.IncludeXmlComments(Path.Combine(basePath, "WebApi.xml")); c.DocumentFilter(); #region JwT Beare认证 c.AddSecurityDefinition("WebApi", new OpenApiSecurityScheme() { Description = "请输入Token", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey, }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference() { Id = "WebApi", Type = ReferenceType.SecurityScheme } }, Array.Empty () } }); #endregion }); } ////// /// public static void Config(IApplicationBuilder app, IWebHostEnvironment env) { app.UseSwagger(); //启用中间件服务对swagger-ui,指定Swagger JSON终结点 app.UseSwaggerUI(c => { c.SwaggerEndpoint("v1/swagger.json", "WebApi"); c.RoutePrefix = "swagger"; c.DocExpansion(DocExpansion.None); }); } } public class DocF : IDocumentFilter { public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) { swaggerDoc.Tags = new List() { new OpenApiTag() { Name = "Login", Description = "登录模块" } }; } }
我的swaggerconfig 添加了jwt的token不需要的可以删除红色部分
3.在statup文件配置swagger
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();//跨域
services.AddControllers(options =>
{
options.UseCentralRoutePrefix(new RouteAttribute("api/[controller]"));
});
SwaggerConfig.Register(services);//添加swagger
}
public void Configure(IApplicationBuilder app, IHostApplicationLifetime lifetime, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
//跨域
app.UseCors(options => options.SetIsOriginAllowed(x => _ = true).AllowAnyMethod().AllowAnyHeader().AllowCredentials());
SwaggerConfig.Config(app, env);//添加swagger
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
////认证
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
4.如果不想在每个接口前加路由信息的话,做一个统一路由的配置中间件
////// 路由配置信息 /// public class CentralRouteMiddleware : IApplicationModelConvention { ////// 定义一个路由前缀变量 /// private readonly AttributeRouteModel _centralPrefix; ////// 调用时传入指定的路由前缀 /// /// public CentralRouteMiddleware(IRouteTemplateProvider routeTemplateProvider) { _centralPrefix = new AttributeRouteModel(routeTemplateProvider); } public void Apply(ApplicationModel application) { //遍历所有的 Controller foreach (var controller in application.Controllers) { var matchedSelectors = controller.Selectors.Where(x => x.AttributeRouteModel != null).ToList(); if (matchedSelectors.Any()) { foreach (var selectorModel in matchedSelectors) { selectorModel.AttributeRouteModel = new AttributeRouteModel(); } } foreach (var item in controller.Actions) { foreach (var selectorModel in item.Selectors) { if (selectorModel.AttributeRouteModel != null) { selectorModel.AttributeRouteModel = AttributeRouteModel.CombineAttributeRouteModel(_centralPrefix, selectorModel.AttributeRouteModel); } else { selectorModel.AttributeRouteModel = new AttributeRouteModel(new RouteAttribute("api/[controller]/[action]")); } } } } } } ////// mvc 扩展类 /// public static class MvcOptionsExtensions { ////// 扩展方法 /// /// /// public static void UseCentralRoutePrefix(this MvcOptions opts, IRouteTemplateProvider routeAttribute) { opts.Conventions.Insert(0, new CentralRouteMiddleware(routeAttribute)); } } }
5.地址栏输入http:localhost:5001/swagger就可以啦