diff --git a/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs b/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs new file mode 100644 index 0000000..40f9d49 --- /dev/null +++ b/ZR.Admin.WebApi/Extensions/SwaggerExtension.cs @@ -0,0 +1,57 @@ +using Infrastructure; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.OpenApi.Models; +using Swashbuckle.AspNetCore.Filters; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; + +namespace ZR.Admin.WebApi.Extensions +{ + public static class SwaggerExtension + { + public static void AddSwaggerConfig(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + IWebHostEnvironment hostEnvironment = App.GetRequiredService(); + + services.AddSwaggerGen(c => + { + c.SwaggerDoc("v1", new OpenApiInfo + { + Title = "ZrAdmin.NET Api - .NET5", + Version = "v1", + Description = "", + }); + //if (CurrentEnvironment.IsDevelopment()) + //{ + //添加文档注释 + c.IncludeXmlComments(Path.Combine(hostEnvironment.ContentRootPath, "ZRAdmin.xml"), true); + //} + //参考文章:http://www.zyiz.net/tech/detail-134965.html + //需要安装包Swashbuckle.AspNetCore.Filters + // 开启权限小锁 需要在对应的Action上添加[Authorize]才能看到 + c.OperationFilter(); + c.OperationFilter(); + + //在header 中添加token,传递到后台 + c.OperationFilter(); + + c.AddSecurityDefinition(JwtBearerDefaults.AuthenticationScheme, + new OpenApiSecurityScheme + { + In = ParameterLocation.Header, + Description = "请输入Login接口返回的Token,前置Bearer。示例:Bearer {Token}", + Name = "Authorization",//jwt默认的参数名称, + Type = SecuritySchemeType.ApiKey, //指定ApiKey + BearerFormat = "JWT",//标识承载令牌的格式 该信息主要是出于文档目的 + Scheme = JwtBearerDefaults.AuthenticationScheme//授权中要使用的HTTP授权方案的名称 + }); + }); + } + } +} diff --git a/ZR.Admin.WebApi/Startup.cs b/ZR.Admin.WebApi/Startup.cs index 4e74224..7e334ba 100644 --- a/ZR.Admin.WebApi/Startup.cs +++ b/ZR.Admin.WebApi/Startup.cs @@ -13,6 +13,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.OpenApi.Models; using SqlSugar.IOC; +using Swashbuckle.AspNetCore.Filters; using System; using System.Collections.Generic; using System.IO; @@ -74,44 +75,19 @@ namespace ZR.Admin.WebApi o.TokenValidationParameters = JwtUtil.ValidParameters(); }); - InjectRepositories(services); + InjectServices(services); services.AddMvc(options => { options.Filters.Add(typeof(GlobalActionMonitor));//ȫע쳣 }) - .AddMvcLocalization() - .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix) .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new JsonConverterUtil.DateTimeConverter()); options.JsonSerializerOptions.Converters.Add(new JsonConverterUtil.DateTimeNullConverter()); }); - services.AddSwaggerGen(c => - { - c.SwaggerDoc("v1", new OpenApiInfo - { - Title = "ZrAdmin.NET Api - .NET5", - Version = "v1", - Description = "", - }); - //if (CurrentEnvironment.IsDevelopment()) - //{ - //ĵע - c.IncludeXmlComments(Path.Combine(CurrentEnvironment.ContentRootPath, "ZRAdmin.xml"), true); - //} - c.AddSecurityDefinition("Bearer", - new OpenApiSecurityScheme - { - In = ParameterLocation.Header, - Description = "OAuthӿڷصTokenǰBearerʾBearer {Token}", - Name = "Authorization",//jwtĬϵIJ, - Type = SecuritySchemeType.ApiKey, //ָApiKey - BearerFormat = "JWT",//ʶƵĸʽ ϢҪdzĵĿ - Scheme = JwtBearerDefaults.AuthenticationScheme//ȨҪʹõHTTPȨ - }); - }); + services.AddSwaggerConfig(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. @@ -163,7 +139,7 @@ namespace ZR.Admin.WebApi /// עServices /// /// - private void InjectRepositories(IServiceCollection services) + private void InjectServices(IServiceCollection services) { services.AddAppService(); diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index 313b4f3..07c5a31 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -34,6 +34,7 @@ +