Program.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. using Autofac.Extensions.DependencyInjection;
  2. using Autofac;
  3. using FreeRedis;
  4. using MessagePack;
  5. using MessagePack.Resolvers;
  6. using Newtonsoft.Json;
  7. using Newtonsoft.Json.Serialization;
  8. using ServiceStack;
  9. using WMS.BZUtil;
  10. using WMS.BZWeb;
  11. using WMS.BZWeb.Middleware;
  12. using WMS.Util;
  13. using WMS.BZSqlSugar;
  14. using WMS.BZServices;
  15. using Microsoft.Extensions.DependencyInjection;
  16. using SqlSugar;
  17. using Microsoft.Extensions.DependencyInjection.Extensions;
  18. using WMS.BZSqlSugar.Repositorys;
  19. var builder = WebApplication.CreateBuilder(args);
  20. builder.Logging.AddLog4Net();
  21. builder.Services.AddAuthentication("CookieAuth")
  22. .AddCookie("CookieAuth", config =>
  23. {
  24. config.Cookie.Name = "MyApp.Cookie";
  25. });
  26. // Add services to the container.
  27. builder.Services.AddControllersWithViews() ;
  28. // Add services to the container.
  29. // AddRazorRuntimeCompilation 与FastReport 冲突。
  30. var AddRazorPages= builder.Services.AddRazorPages() ;
  31. #if DEBUG
  32. AddRazorPages.AddRazorRuntimeCompilation();
  33. #endif
  34. var WMSRedisConnect = builder.Configuration.GetValue<string>("ConnectionConfigs:WMSRedisConnect");
  35. //Autofac注入
  36. builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
  37. builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
  38. {
  39. builder.RegisterGeneric(typeof(Repository<>)).As(typeof(Repository<>));
  40. builder.RegisterGeneric(typeof(QuestDBRepository<>)).As(typeof(QuestDBRepository<>));
  41. //builder.RegisterGeneric(typeof(PTRepository<>)).As(typeof(PTRepository<>));
  42. //builder.RegisterGeneric(typeof(HJRepository<>)).As(typeof(HJRepository<>));
  43. //builder.RegisterGeneric(typeof(FJRepository<>)).As(typeof(FJRepository<>));
  44. //builder.RegisterGeneric(typeof(CPRepository<>)).As(typeof(CPRepository<>));
  45. //builder.RegisterGeneric(typeof(SXRepository<>)).As(typeof(SXRepository<>));
  46. builder.RegisterModule(new AutoFacManager());
  47. builder.Register(obj => new RedisService(WMSRedisConnect)).SingleInstance();
  48. });
  49. builder.Services.AddResponseCompression();
  50. builder.Services.AddHttpContextAccessor();
  51. builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
  52. builder.Services.AddSingleton<IOperator, Operator>();
  53. //builder.Services.AddTransient<FastReport.Web.Services.IConnectionsService>();
  54. // 添加 Redis 配置项
  55. builder.Services.Configure<WCSRedis>(builder.Configuration.GetSection("WCSRedis"));
  56. builder.Services.Configure<DeviceEffectiveUrls>(builder.Configuration.GetSection("DeviceEffectiveUrls"));
  57. builder.Services.AddSingleton(provider =>
  58. {
  59. var options = provider.GetRequiredService<Microsoft.Extensions.Options.IOptions<DeviceEffectiveUrls>>();
  60. return new Dictionary<string, string>
  61. {
  62. { "HJUrls", options.Value.HJUrls},
  63. { "PTUrls", options.Value.PTUrls },
  64. { "FJUrls", options.Value.FJUrls },
  65. { "SXUrls", options.Value.SXUrls },
  66. { "CPUrls", options.Value.CPUrls }
  67. };
  68. });
  69. builder.Services.AddSingleton(provider =>
  70. {
  71. MessagePackSerializer.DefaultOptions = StandardResolver.Options.WithCompression(MessagePackCompression.Lz4Block);
  72. var options = provider.GetRequiredService<Microsoft.Extensions.Options.IOptions<WCSRedis>>();
  73. return new Dictionary<string, RedisClient>
  74. {
  75. { "HJRedis", new RedisClient(options.Value.HJRedis) //options.Value.HJRedis "118.178.107.197:6379,database=0,password=123456"
  76. {
  77. Serialize = obj =>
  78. {
  79. var bytes = JsonConvert.SerializeObject(obj);// MessagePackSerializer.Serialize(obj);
  80. return bytes;
  81. },
  82. Deserialize = (bytes, type) =>
  83. {
  84. var obj = JsonConvert.DeserializeObject(bytes, type);// MessagePackSerializer.Deserialize(type, bytes);
  85. return obj;
  86. }
  87. }
  88. },
  89. { "PTRedis", new RedisClient(options.Value.PTRedis) },
  90. { "FJRedis", new RedisClient(options.Value.FJRedis) },
  91. { "SXRedis", new RedisClient(options.Value.SXRedis) },
  92. { "CPRedis", new RedisClient(options.Value.CPRedis) }
  93. };
  94. });
  95. builder.Services.AddMvcCore();
  96. //builder.Services.AddMvc().AddRazorPagesOptions(options =>
  97. //{
  98. // options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
  99. //});
  100. builder.Services.AddSession(o =>
  101. {
  102. o.IdleTimeout = TimeSpan.FromHours(5);
  103. });
  104. //配置JSON.NET
  105. builder.Services.AddControllers().AddNewtonsoftJson(opt =>
  106. {
  107. //忽略循环引用
  108. opt.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
  109. //不改变字段大小
  110. opt.SerializerSettings.ContractResolver = new DefaultContractResolver();
  111. });
  112. //builder.Services.AddAntiforgery(options => options.HeaderName = "X-CSRF-TOKEN");
  113. //builder.WebHost.UseUrls("http://*:5000/");
  114. builder.Services.AddCors(policy =>
  115. {
  116. policy.AddPolicy("CorsPolicy", opt => opt
  117. .AllowAnyOrigin()
  118. .AllowAnyHeader()
  119. .AllowAnyMethod()
  120. .WithExposedHeaders("X-Pagination"));
  121. });
  122. var deviceEffectiveUrls = builder.Configuration.GetSection("DeviceEffectiveUrls").Get<DeviceEffectiveUrls>();
  123. builder.Services.AddHttpClient("HJUrls", config =>
  124. {
  125. config.BaseAddress = new Uri(deviceEffectiveUrls.HJUrls);
  126. //config.DefaultRequestHeaders.Add("header_1", "header_1");
  127. });
  128. builder.Services.AddHttpClient("FJUrls", config =>
  129. {
  130. config.BaseAddress = new Uri(deviceEffectiveUrls.FJUrls);
  131. });
  132. builder.Services.AddHttpClient("SXUrls", config =>
  133. {
  134. config.BaseAddress = new Uri(deviceEffectiveUrls.SXUrls);
  135. });
  136. builder.Services.AddHttpClient("PTUrls", config =>
  137. {
  138. config.BaseAddress = new Uri(deviceEffectiveUrls.PTUrls);
  139. });
  140. builder.Services.AddHttpClient("CPUrls", config =>
  141. {
  142. config.BaseAddress = new Uri(deviceEffectiveUrls.CPUrls);
  143. });
  144. builder.Services.AddHttpClient();
  145. var app = builder.Build();
  146. // Configure the HTTP request pipeline.
  147. if (!app.Environment.IsDevelopment())
  148. {
  149. app.UseExceptionHandler("/Error");
  150. // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
  151. app.UseHsts();
  152. }
  153. string baseDir = app.Environment.ContentRootPath;
  154. ConfigHelper.SetValue("baseDir", baseDir);
  155. //app.UseHttpsRedirection();
  156. //初始化db
  157. builder.Services.AddQuestDBSqlSugarDb(builder.Configuration, app.Environment);
  158. builder.Services.AddSqlSugarDb(builder.Configuration, app.Environment);
  159. //app.Urls.Add("http://0.0.0.0:8002");
  160. app.UseSession().UseCookiePolicy();
  161. app.UseStaticFiles();
  162. app.UseResponseCompression();
  163. app.UseRouting();
  164. //FastReport 暂时不用。与razor编译冲突。 需要卸载Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 这个然后安装
  165. // FastReport.OpenSource FastReport.OpenSource.Export.PdfSimple FastReport.OpenSource.Web
  166. //app.UseFastReport();
  167. app.UseAuthorization();
  168. app.MapRazorPages();
  169. //app.UseCors(option => option.AllowAnyOrigin().WithMethods("GET", "POST").WithHeaders("token"));
  170. app.UseCors("CorsPolicy");
  171. //app.UseEndpoints(endpoints =>
  172. //{
  173. // endpoints.MapControllerRoute(
  174. // name: "default",
  175. // pattern: "{controller=Home}/{action=Index}/{id?}");
  176. // endpoints.MapControllerRoute(
  177. // name: "area",
  178. // pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
  179. //});
  180. app.UseMiddleware<AuthorizeMiddleware>();
  181. app.UseEndpoints(endpoints =>
  182. {
  183. endpoints.MapControllerRoute(
  184. name: "areas",
  185. pattern: "{area:exists}/{controller}/{action}/{id?}",
  186. defaults: new { controller = "Home", action = "Index" });
  187. endpoints.MapControllerRoute(
  188. name: "default",
  189. pattern: "{controller}/{action}/{id?}",
  190. defaults: new { controller = "Home", action = "Index" });
  191. endpoints.MapRazorPages();
  192. });
  193. app.Run();