Files
Yi.Admin/Yi.Abp.Net8/src/Yi.Abp.Web/YiAbpWebModule.cs

184 lines
6.4 KiB
C#
Raw Normal View History

2023-12-11 09:55:12 +08:00
using System.Text;
using System.Text.Json.Serialization;
2023-12-11 09:55:12 +08:00
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Cors;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models;
using Newtonsoft.Json.Converters;
2023-12-11 09:55:12 +08:00
using Volo.Abp;
using Volo.Abp.AspNetCore.Authentication.JwtBearer;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.AntiForgery;
using Volo.Abp.AspNetCore.Serilog;
using Volo.Abp.Auditing;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
using Volo.Abp.Swashbuckle;
using Yi.Abp.Application;
using Yi.Abp.SqlsugarCore;
using Yi.Framework.AspNetCore;
using Yi.Framework.AspNetCore.Microsoft.AspNetCore.Builder;
using Yi.Framework.AspNetCore.Microsoft.Extensions.DependencyInjection;
2023-12-11 21:14:12 +08:00
using Yi.Framework.Bbs.Application;
2023-12-11 09:55:12 +08:00
using Yi.Framework.Rbac.Application;
using Yi.Framework.Rbac.Domain.Shared.Options;
namespace Yi.Abp.Web
{
[DependsOn(
2023-12-12 17:56:11 +08:00
typeof(YiAbpSqlSugarCoreModule),
2023-12-11 09:55:12 +08:00
typeof(YiAbpApplicationModule),
typeof(AbpAspNetCoreMvcModule),
typeof(AbpAutofacModule),
typeof(AbpSwashbuckleModule),
typeof(AbpAspNetCoreSerilogModule),
typeof(AbpAuditingModule),
typeof(AbpAspNetCoreAuthenticationJwtBearerModule),
typeof(YiFrameworkAspNetCoreModule)
)]
public class YiAbpWebModule : AbpModule
{
private const string DefaultCorsPolicyName = "Default";
public override Task ConfigureServicesAsync(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
2023-12-12 17:16:28 +08:00
var host = context.Services.GetHostingEnvironment();
2023-12-11 09:55:12 +08:00
var service = context.Services;
2023-12-11 21:14:12 +08:00
2023-12-11 09:55:12 +08:00
//请求日志
Configure<AbpAuditingOptions>(optios =>
{
optios.IsEnabled = true;
optios.AlwaysLogSelectors.Add(x => Task.FromResult(true));
});
//动态Api
Configure<AbpAspNetCoreMvcOptions>(options =>
{
2023-12-11 22:14:13 +08:00
options.ConventionalControllers.Create(typeof(YiAbpApplicationModule).Assembly, options => options.RemoteServiceName = "default");
2023-12-11 18:43:36 +08:00
options.ConventionalControllers.Create(typeof(YiFrameworkRbacApplicationModule).Assembly, options => options.RemoteServiceName = "rbac");
2023-12-11 21:14:12 +08:00
options.ConventionalControllers.Create(typeof(YiFrameworkBbsApplicationModule).Assembly, options => options.RemoteServiceName = "bbs");
2023-12-11 09:55:12 +08:00
});
//设置api格式
service.AddControllers().AddNewtonsoftJson(options =>
{
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
2024-01-05 23:05:13 +08:00
options.SerializerSettings.Converters.Add(new StringEnumConverter());
2023-12-11 09:55:12 +08:00
});
2023-12-12 14:33:32 +08:00
2023-12-11 09:55:12 +08:00
Configure<AbpAntiForgeryOptions>(options =>
{
options.AutoValidate = false;
});
//Swagger
2023-12-11 22:14:13 +08:00
context.Services.AddYiSwaggerGen<YiAbpWebModule>(options =>
{
2023-12-12 17:16:28 +08:00
options.SwaggerDoc("default", new OpenApiInfo { Title = "Yi.Framework.Abp", Version = "v1", Description = "集大成者" });
2023-12-11 22:14:13 +08:00
});
2023-12-11 09:55:12 +08:00
//跨域
context.Services.AddCors(options =>
{
options.AddPolicy(DefaultCorsPolicyName, builder =>
{
builder
.WithOrigins(
configuration["App:CorsOrigins"]!
.Split(";", StringSplitOptions.RemoveEmptyEntries)
.Select(o => o.RemovePostFix("/"))
.ToArray()
)
.WithAbpExposedHeaders()
.SetIsOriginAllowedToAllowWildcardSubdomains()
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
});
//jwt鉴权
2023-12-16 14:10:11 +08:00
var jwtOptions = configuration.GetSection(nameof(JwtOptions)).Get<JwtOptions>();
2023-12-11 09:55:12 +08:00
context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
2024-01-05 23:05:13 +08:00
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
2023-12-11 09:55:12 +08:00
{
2024-01-05 23:05:13 +08:00
ClockSkew = TimeSpan.Zero,
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = jwtOptions.Issuer,
ValidAudience = jwtOptions.Audience,
RequireExpirationTime = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtOptions.SecurityKey))
};
options.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
2023-12-11 09:55:12 +08:00
{
2024-01-05 23:05:13 +08:00
var accessToken = context.Request.Query["access_token"];
if (!string.IsNullOrEmpty(accessToken))
2023-12-11 09:55:12 +08:00
{
2024-01-05 23:05:13 +08:00
context.Token = accessToken;
2023-12-11 09:55:12 +08:00
}
2024-01-05 23:05:13 +08:00
return Task.CompletedTask;
}
};
});
2023-12-11 09:55:12 +08:00
//授权
context.Services.AddAuthorization();
return Task.CompletedTask;
}
public override Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
{
var service = context.ServiceProvider;
var env = context.GetEnvironment();
var app = context.GetApplicationBuilder();
app.UseRouting();
2023-12-11 22:14:13 +08:00
2023-12-11 21:14:12 +08:00
//跨域
2023-12-11 09:55:12 +08:00
app.UseCors(DefaultCorsPolicyName);
2023-12-11 22:14:13 +08:00
2023-12-11 21:14:12 +08:00
//鉴权
2023-12-11 09:55:12 +08:00
app.UseAuthentication();
2023-12-11 21:14:12 +08:00
//swagger
2023-12-11 09:55:12 +08:00
app.UseYiSwagger();
2024-01-05 23:05:13 +08:00
2024-01-02 23:26:05 +08:00
//请求处理
app.UseYiApiHandlinge();
2023-12-28 20:24:49 +08:00
//静态资源
app.UseStaticFiles("/api/app/wwwroot");
app.UseDefaultFiles();
app.UseDirectoryBrowser("/api/app/wwwroot");
2023-12-11 21:14:12 +08:00
//工作单元
2023-12-11 09:55:12 +08:00
app.UseUnitOfWork();
2023-12-11 21:14:12 +08:00
//授权
2023-12-11 09:55:12 +08:00
app.UseAuthorization();
2023-12-11 21:14:12 +08:00
//审计日志
2023-12-11 09:55:12 +08:00
app.UseAuditing();
2023-12-11 21:14:12 +08:00
//日志记录
2023-12-11 09:55:12 +08:00
app.UseAbpSerilogEnrichers();
2023-12-11 21:14:12 +08:00
//终节点
2023-12-11 09:55:12 +08:00
app.UseConfiguredEndpoints();
return Task.CompletedTask;
}
}
}