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就可以啦