足力健后端,使用.netcore版本,合并1个项目使用

Startup.cs 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IdentityModel.Tokens.Jwt;
  4. using System.IRepositories;
  5. using System.Linq;
  6. using System.Repositories;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Common;
  10. using Microsoft.AspNetCore.Authentication.JwtBearer;
  11. using Microsoft.AspNetCore.Authorization;
  12. using Microsoft.AspNetCore.Builder;
  13. using Microsoft.AspNetCore.Hosting;
  14. using Microsoft.AspNetCore.HttpsPolicy;
  15. using Microsoft.AspNetCore.Mvc;
  16. using Microsoft.Extensions.Configuration;
  17. using Microsoft.Extensions.DependencyInjection;
  18. using Microsoft.Extensions.Logging;
  19. using Microsoft.Extensions.Options;
  20. using Microsoft.IdentityModel.Tokens;
  21. using NLog.Extensions.Logging;
  22. using NLog.Web;
  23. using SignToken;
  24. using Steeltoe.Discovery.Client;
  25. using Microsoft.Extensions.FileProviders;
  26. using System.IO;
  27. using Microsoft.AspNetCore.Http;
  28. using Hangfire;
  29. using TVShoppingCallCenter_ZLJ.Controllers.hangfire;
  30. using SqlSugar;
  31. using Hangfire.MySql.Core;
  32. using System.Data;
  33. namespace TVShoppingCallCenter_ZLJ
  34. {
  35. public class Startup
  36. {
  37. public Startup(IConfiguration configuration)
  38. {
  39. Configuration = configuration;
  40. }
  41. public IConfiguration Configuration { get; }
  42. // This method gets called by the runtime. Use this method to add services to the container.
  43. public void ConfigureServices(IServiceCollection services)
  44. {
  45. #region Cors 配置
  46. services.AddCors(options =>
  47. {
  48. options.AddPolicy("Cors",//CorsPolicy
  49. builder => builder.AllowAnyOrigin()//builder.WithOrigins(Configuration["Cors"].Split(','))
  50. .AllowAnyMethod()
  51. .SetIsOriginAllowed(_ => true)//上线后删除此行 加入域列表 内网可忽略
  52. .AllowAnyHeader()
  53. .AllowCredentials().SetPreflightMaxAge(TimeSpan.FromMinutes(30)));
  54. });
  55. #endregion
  56. #region 授权配置
  57. //读取jwt配置文件
  58. var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:SecretKey"].ToString()));
  59. var tokenValidationParameters = new TokenValidationParameters
  60. {
  61. ValidateIssuerSigningKey = true,
  62. IssuerSigningKey = signingKey,
  63. ValidateIssuer = true,
  64. ValidIssuer = Configuration["Jwt:Issuer"].ToString(),//发行人
  65. ValidateAudience = true,
  66. ValidAudience = Configuration["Jwt:Audience"].ToString(),//订阅人
  67. ValidateLifetime = true,
  68. ClockSkew = TimeSpan.Zero,
  69. RequireExpirationTime = true,
  70. };
  71. services.AddAuthentication(options =>
  72. {
  73. options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
  74. options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
  75. })
  76. .AddJwtBearer(o =>
  77. {
  78. o.RequireHttpsMetadata = false;
  79. o.TokenValidationParameters = tokenValidationParameters;
  80. o.Events = new JwtBearerEvents
  81. {
  82. OnTokenValidated = context =>
  83. {
  84. if (context.Request.Path.Value.ToString() == "/api/logout")
  85. {
  86. var token = ((context as TokenValidatedContext).SecurityToken as JwtSecurityToken).RawData;
  87. }
  88. return Task.CompletedTask;
  89. }
  90. };
  91. });
  92. #endregion
  93. #region 配置数据库
  94. BaseContext.DB_ConnectionString = Configuration.GetConnectionString("MySqlConnection");
  95. BaseMysqlContext.DB_ConnectionString = Configuration.GetConnectionString("MySqlConnection");
  96. #endregion
  97. #region redis配置
  98. services.AddDistributedRedisCache(options =>
  99. {
  100. options.InstanceName = Configuration["Redis:InstanceName"].ToString();
  101. options.Configuration = $"{Configuration["Redis:HostName"].ToString()}:{Configuration["Redis:Port"].ToString()},allowAdmin=true,password={Configuration["Redis:Password"].ToString()},defaultdatabase={Configuration["Redis:Defaultdatabase"].ToString()}";
  102. });
  103. #endregion
  104. #region 注入
  105. services.AddSingleton<IConfiguration>(Configuration);
  106. //services.AddSingleton<IAuthorizationHandler, PermissionAuthorizationHandler>();
  107. //services.AddSingleton<IPermissionService, PermissionService>();
  108. services.AddTransient<ISys_UserAccountRepository, Sys_UserAccountRepository>();
  109. services.AddTransient<ISys_RoleInfoRepository, Sys_RoleInfoRepository>();
  110. services.AddTransient<ISys_SeatGroupRepository, Sys_SeatGroupRepository>();
  111. services.AddTransient<ISys_LoginLogsRepository, Sys_LoginLogsRepository>();
  112. services.AddTransient<ISys_DepartmentRepository, Sys_DepartmentRepository>();
  113. services.AddTransient<ISys_DictionaryValueRepository, Sys_DictionaryValueRepository>();
  114. services.AddTransient<ISys_ModuleButtonInfoRepository, Sys_ModuleButtonInfoRepository>();
  115. services.AddTransient<ISys_ModuleInfoRepository, Sys_ModuleInfoRepository>();
  116. services.AddTransient<ISys_RoleFunctionRepository, Sys_RoleFunctionRepository>();
  117. services.AddTransient<ISys_SeatPermissionConfigRepository, Sys_SeatPermissionConfigRepository>();
  118. services.AddTransient<ISys_SystemConfigRepository, Sys_SystemConfigRepository>();
  119. services.AddTransient<ISys_MobileDataRepository, Sys_MobileDataRepository>();
  120. services.AddTransient<ISys_WorkOffDaysRepository, Sys_WorkOffDaysRepository>();
  121. services.AddTransient<ISys_WorkTimesRepository, Sys_WorkTimesRepository>();
  122. services.AddTransient<ISys_AreaRepository, Sys_AreaRepository>();
  123. services.AddTransient<ISys_CallDutyNumberRepository, Sys_CallDutyNumberRepository>();
  124. services.AddTransient<ISys_CallBlacklistRepository, Sys_CallBlacklistRepository>();
  125. services.AddTransient<ISys_PositionRepository, Sys_PositionRepository>();
  126. services.AddTransient<ISys_DeptTeamRepository, Sys_DeptTeamRepository>();
  127. services.AddTransient<IBus_ProductClassRepository, Bus_ProductClassRepository>();
  128. services.AddTransient<IBus_ProductRepository, Bus_ProductRepository>();
  129. services.AddTransient<IBus_TagRepository, Bus_TagRepository>();
  130. services.AddTransient<IBus_OrderRepository, Bus_OrderRepository>();
  131. services.AddTransient<IBus_OrderDetailRepository, Bus_OrderDetailRepository>();
  132. services.AddTransient<IBus_StockLogRepository, Bus_StockLogRepository>();
  133. services.AddTransient<IBus_OrderMergeRepository, Bus_OrderMergeRepository>();
  134. services.AddTransient<IBus_AfterSaleRepository, Bus_AfterSaleRepository>();
  135. services.AddTransient<IBus_OrderMoneyRepository, Bus_OrderMoneyRepository>();
  136. services.AddTransient<IBus_SMSLogRepository, Bus_SMSLogRepository>();
  137. services.AddTransient<IBus_SMSTemplateRepository, Bus_SMSTemplateRepository>();
  138. services.AddTransient<ICall_CallRecordsRepository, Call_CallRecordsRepository>();
  139. services.AddTransient<ICDRRepository, CDRRepository>();
  140. services.AddHangfire(x => x.UseStorage(new MySqlStorage(BaseMysqlContext.DB_ConnectionString, new MySqlStorageOptions
  141. {
  142. TransactionIsolationLevel = IsolationLevel.ReadCommitted,
  143. QueuePollInterval = TimeSpan.FromSeconds(15),
  144. JobExpirationCheckInterval = TimeSpan.FromHours(1),
  145. CountersAggregateInterval = TimeSpan.FromMinutes(5),
  146. PrepareSchemaIfNecessary = true,
  147. DashboardJobListLimit = 50000,
  148. TransactionTimeout = TimeSpan.FromMinutes(1),
  149. TablePrefix = "Hangfire_"
  150. })));
  151. //GlobalConfiguration.Configuration.UseStorage(
  152. // new MySqlStorage(BaseMysqlContext.DB_ConnectionString, new MySqlStorageOptions
  153. // {
  154. // TransactionIsolationLevel = IsolationLevel.ReadCommitted,
  155. // QueuePollInterval = TimeSpan.FromSeconds(15),
  156. // JobExpirationCheckInterval = TimeSpan.FromHours(1),
  157. // CountersAggregateInterval = TimeSpan.FromMinutes(5),
  158. // PrepareSchemaIfNecessary = true,
  159. // DashboardJobListLimit = 50000,
  160. // TransactionTimeout = TimeSpan.FromMinutes(1),
  161. // TablePrefix = "Hangfire_"
  162. // }));
  163. //services.AddHangfire(x => x.UseSqlServerStorage(BaseContext.DB_ConnectionString));
  164. services.AddTransient<ICus_VipInfoRepository, Cus_VipInfoRepository>();
  165. services.AddTransient<ICus_VipLabelInfoRepository, Cus_VipLabelInfoRepository>();
  166. services.AddTransient<ICus_ScoreSetRepository, Cus_ScoreSetRepository>();
  167. services.AddTransient<ICus_MsgRepository, Cus_MsgRepository>();
  168. services.AddTransient<ISys_MarketingRepository, Sys_MarketingRepository>();
  169. services.AddTransient<ISys_MediaCenteRepository, Sys_MediaCente>();
  170. services.AddTransient<ISys_MediaManagementRepository, Sys_MediaManagement>();
  171. services.AddTransient<ISys_PlanManagemenRepository, Sys_PlanManagemen>();
  172. services.AddTransient<ISys_TaskManagementRepository, Sys_TaskManagementRepository>();
  173. services.AddTransient<ISys_TodoManagementRepository, Sys_TodoManagementRepository>();
  174. services.AddTransient<ISMS_InternalMessagesReposytory, SMS_InternalMessagesReposytory>();
  175. services.AddTransient<IQC_IndexBaseReposytory, QC_IndexBaseReposytory>();
  176. services.AddTransient<IQC_IndexCategoryReposytory, QC_IndexCategoryReposytory>();
  177. services.AddTransient<IRepositoryCategoryRepository, RepositoryCategoryRepository>();
  178. services.AddTransient<IRepositoryInformationRepository, RepositoryInformationRepository>();
  179. services.AddTransient<ISys_AccessoriesRepository, Sys_AccessoriesRepository>();
  180. #endregion
  181. //services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
  182. services.AddMvc(options =>
  183. {
  184. options.Filters.Add(new ActionFilter());
  185. options.Filters.Add(new ExceptionFilter());
  186. }).AddJsonOptions(op => op.SerializerSettings.ContractResolver =
  187. new Newtonsoft.Json.Serialization.DefaultContractResolver()).AddControllersAsServices();
  188. #region steeltoe
  189. //services.AddDiscoveryClient(Configuration);
  190. #endregion
  191. }
  192. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  193. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
  194. {
  195. app.UseCors("Cors");
  196. app.UseDeveloperExceptionPage();
  197. app.UseDatabaseErrorPage();
  198. app.UseBrowserLink();
  199. app.UseStaticFiles(new StaticFileOptions()
  200. {
  201. FileProvider = new PhysicalFileProvider(
  202. Path.Combine(Directory.GetCurrentDirectory(), @"excelmod")),
  203. RequestPath = new PathString("/excelmod")
  204. });
  205. app.UseStaticFiles(new StaticFileOptions()
  206. {
  207. FileProvider = new PhysicalFileProvider(
  208. Path.Combine(Directory.GetCurrentDirectory(), @"log")),
  209. RequestPath = new PathString("/log")
  210. });
  211. //app.UseHttpsRedirection();
  212. //引入授权
  213. app.UseAuthentication();
  214. app.UseMvc();
  215. app.UseHangfireServer(new BackgroundJobServerOptions
  216. {
  217. Queues = new[] { "birthday", "minutely" },//队列名称,只能为小写
  218. WorkerCount = Environment.ProcessorCount * 3, //并发任务数
  219. ServerName = "hangfireMysql",//服务器名称
  220. });//启动Hangfire服务 有可选参数
  221. app.UseHangfireDashboard("/hangfire",
  222. new DashboardOptions
  223. {
  224. Authorization = new[] { new HangfireAuthorizationFilter() }
  225. });//启动hangfire面板 有可选参数
  226. RecurringJob.AddOrUpdate<HangfireController>(a => a.AddOrder(), Cron.Daily, TimeZoneInfo.Local, "birthday");
  227. RecurringJob.AddOrUpdate<HangfireController>(a => a.SyncCallRecord(), Cron.Daily, TimeZoneInfo.Local, "minutely");
  228. #region steeltoe
  229. //app.UseDiscoveryClient();
  230. #endregion
  231. #region Nlog 引入
  232. loggerFactory.AddNLog();//添加NLog
  233. env.ConfigureNLog("nlog.config");//读取Nlog配置文件
  234. app.AddNLogWeb();
  235. #endregion
  236. }
  237. }
  238. }