using System; using YYApi.Helpers; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerUI; namespace YYApi { /// /// 加入系统的扩展信息 /// public static class Extensions { /// /// 添加自定义授权认证中间价 /// /// /// public static IServiceCollection AddAuth(this IServiceCollection builder) { return builder.AddScoped(); } /// /// 添加整个YYAPI /// /// /// /// /// public static IServiceCollection AddYYApi(this IServiceCollection builder, string title, string description = null) { return builder.AddAuth().AddApiDoc(title, description); } /// /// 添加Api文档服务 /// /// /// 文档标题 /// 文档描述 /// public static IServiceCollection AddApiDoc(this IServiceCollection builder, string title, string description = null) { return builder.AddSwaggerGen(x => { x.SwaggerDoc("api", new OpenApiInfo {Title = title, Description = description}); x.EnableAnnotations(); x.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference {Type = ReferenceType.SecurityScheme, Id = "HeaderToken"} }, new[] {"readAccess", "writeAccess"} } }); x.AddSecurityDefinition("HeaderToken", new OpenApiSecurityScheme {Name = "Token", In = ParameterLocation.Header}); }); } /// /// 使用异常中间价扩展 /// /// /// public static IApplicationBuilder UseExceptionMiddleware(this IApplicationBuilder builder) { return builder.UseMiddleware(); } /// /// 使用文档UI /// /// /// 文档标题 /// 文档支持的提交方式(如果不指定,默认使用POST) /// public static IApplicationBuilder UseApiDoc(this IApplicationBuilder builder, string title, params SubmitMethod[] submitMethods) { return builder.UseSwagger(x => x.RouteTemplate = "docs/{documentName}.json").UseSwaggerUI(x => { x.RoutePrefix = "docs"; x.DocumentTitle = title; x.SwaggerEndpoint("/docs/api.json", name: title); x.EnableValidator(); if (submitMethods.Length > 0) { x.SupportedSubmitMethods(submitMethods); } else { x.SupportedSubmitMethods(SubmitMethod.Post); } x.DisplayRequestDuration(); }); } /// /// 同时使用Api文档和异常处理中间件 /// /// /// 文档标题 /// API提交方式定义 /// public static IApplicationBuilder UseDocAndException(this IApplicationBuilder builder, string title = "API文档", params SubmitMethod[] submitMethods) { return builder.UseExceptionMiddleware().UseApiDoc(title, submitMethods); } /// /// 使用自定义认证中间件(依赖IDistributedCache) /// /// /// public static IApplicationBuilder UseAuthMiddleware(this IApplicationBuilder builder) { return builder.UseMiddleware(); } /// /// 使用所有YYApi自定义中间件 /// /// /// /// /// public static IApplicationBuilder UseYYApiMiddleware(this IApplicationBuilder builder, string title = "API文档", params SubmitMethod[] submitMethods) { return builder.UseExceptionMiddleware().UseApiDoc(title, submitMethods).UseMiddleware(); } } }