Program.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. using Infrastructure;
  2. using Microsoft.AspNetCore.Authentication.JwtBearer;
  3. using Microsoft.AspNetCore.DataProtection;
  4. using ZR.Admin.WebApi.Framework;
  5. using Hei.Captcha;
  6. using Infrastructure.Extensions;
  7. using ZR.Admin.WebApi.Extensions;
  8. using ZR.Admin.WebApi.Filters;
  9. using ZR.Admin.WebApi.Middleware;
  10. using ZR.Admin.WebApi.Hubs;
  11. var builder = WebApplication.CreateBuilder(args);
  12. // Add services to the container.
  13. builder.Services.AddControllers();
  14. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
  15. builder.Services.AddEndpointsApiExplorer();
  16. builder.Services.AddSwaggerGen();
  17. //注入HttpContextAccessor
  18. builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
  19. var corsUrls = builder.Configuration["corsUrls"]?.Split(',', StringSplitOptions.RemoveEmptyEntries);
  20. //配置跨域
  21. builder.Services.AddCors(c =>
  22. {
  23. c.AddPolicy("Policy", policy =>
  24. {
  25. policy.WithOrigins(corsUrls == null ? Array.Empty<string>() : corsUrls)
  26. .AllowAnyHeader()//允许任意头
  27. .AllowCredentials()//允许cookie
  28. .AllowAnyMethod();//允许任意方法
  29. });
  30. });
  31. //注入SignalR实时通讯,默认用json传输
  32. builder.Services.AddSignalR();
  33. //消除Error unprotecting the session cookie警告
  34. builder.Services.AddDataProtection()
  35. .PersistKeysToFileSystem(new DirectoryInfo(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "DataProtection"));
  36. //普通验证码
  37. builder.Services.AddHeiCaptcha();
  38. //builder.Services.AddSession();
  39. builder.Services.AddHttpContextAccessor();
  40. //绑定整个对象到Model上
  41. builder.Services.Configure<OptionsSetting>(builder.Configuration);
  42. //jwt 认证
  43. builder.Services.AddAuthentication(options =>
  44. {
  45. options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
  46. options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
  47. }).AddCookie()
  48. .AddJwtBearer(o =>
  49. {
  50. o.TokenValidationParameters = JwtUtil.ValidParameters();
  51. });
  52. //InternalApp.InternalServices = builder.Services;
  53. builder.Services.AddAppService();
  54. builder.Services.AddSingleton(new AppSettings(builder.Configuration));
  55. //开启计划任务
  56. builder.Services.AddTaskSchedulers();
  57. //初始化db
  58. DbExtension.AddDb(builder.Configuration);
  59. //注册REDIS 服务
  60. Task.Run(() =>
  61. {
  62. //RedisServer.Initalize();
  63. });
  64. builder.Services.AddMvc(options =>
  65. {
  66. options.Filters.Add(typeof(GlobalActionMonitor));//全局注册
  67. })
  68. .AddJsonOptions(options =>
  69. {
  70. options.JsonSerializerOptions.Converters.Add(new JsonConverterUtil.DateTimeConverter());
  71. options.JsonSerializerOptions.Converters.Add(new JsonConverterUtil.DateTimeNullConverter());
  72. });
  73. builder.Services.AddSwaggerConfig();
  74. // 显示logo
  75. builder.Services.AddLogo();
  76. var app = builder.Build();
  77. InternalApp.ServiceProvider = app.Services;
  78. if (builder.Configuration["InitDb"].ParseToBool() == true)
  79. {
  80. app.Services.InitDb();
  81. }
  82. app.UseSwagger();
  83. //使可以多次多去body内容
  84. app.Use((context, next) =>
  85. {
  86. context.Request.EnableBuffering();
  87. if (context.Request.Query.TryGetValue("access_token", out var token))
  88. {
  89. context.Request.Headers.Add("Authorization", $"Bearer {token}");
  90. }
  91. return next();
  92. });
  93. //开启访问静态文件/wwwroot目录文件,要放在UseRouting前面
  94. app.UseStaticFiles();
  95. //开启路由访问
  96. app.UseRouting();
  97. app.UseCors("Policy");//要放在app.UseEndpoints前。
  98. //app.UseHttpsRedirection();
  99. app.UseAuthentication();
  100. app.UseAuthorization();
  101. //开启缓存
  102. app.UseResponseCaching();
  103. //恢复/启动任务
  104. app.UseAddTaskSchedulers();
  105. //使用全局异常中间件
  106. app.UseMiddleware<GlobalExceptionMiddleware>();
  107. //设置socket连接
  108. app.MapHub<MessageHub>("/msgHub");
  109. app.MapControllerRoute(
  110. name: "default",
  111. pattern: "{controller=Home}/{action=Index}/{id?}");
  112. app.MapControllers();
  113. app.Run();