飞星
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

280 linhas
12 KiB

  1. using Microsoft.AspNetCore.Builder;
  2. using Microsoft.AspNetCore.Hosting;
  3. using Microsoft.Extensions.Configuration;
  4. using Microsoft.Extensions.DependencyInjection;
  5. using Microsoft.EntityFrameworkCore;
  6. using Permission.Service.IServices;
  7. using Permission.Service.Services;
  8. using Permission.Entity.DbContext;
  9. using AutoMapper;
  10. using Microsoft.Extensions.Caching.Memory;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.IO;
  14. using Permission.Data.Repositories;
  15. using Permission.Service.DTO;
  16. using Permission.Utils.Cache;
  17. using Permission.Web.Models;
  18. using Permission.Infrastructure.Repositories;
  19. using Permission.Entity.System;
  20. using Permission.Infrastructure.Core;
  21. using Microsoft.Extensions.Logging;
  22. using System.Text;
  23. using Microsoft.AspNetCore.Http;
  24. using Microsoft.AspNetCore.StaticFiles;
  25. using Microsoft.Extensions.DependencyInjection.Extensions;
  26. using Microsoft.Extensions.FileProviders;
  27. using Microsoft.Extensions.Options;
  28. using NLog;
  29. using NLog.Extensions.Logging;
  30. using NLog.Web;
  31. using Permission.Data;
  32. using Permission.Entity.Chart;
  33. using Permission.Entity.Disk;
  34. using Permission.Entity.Init;
  35. using Permission.Entity.News;
  36. using Permission.Web.Filters;
  37. namespace Permission.Web
  38. {
  39. public class Startup
  40. {
  41. //AutoMapper
  42. private MapperConfiguration _mapperConfiguration { get; set; }
  43. public Startup(IConfiguration configuration)
  44. {
  45. Configuration = configuration;
  46. _mapperConfiguration = new MapperConfiguration(cfg =>
  47. {
  48. cfg.AddProfile(new AutoMapperProfileConfiguration());
  49. });
  50. }
  51. public IConfiguration Configuration { get; }
  52. // This method gets called by the runtime. Use this method to add services to the container.
  53. public void ConfigureServices(IServiceCollection services)
  54. {
  55. // Adds a default in-memory implementation of IDistributedCache
  56. services.AddDistributedMemoryCache();
  57. //注意:一定要加 sslmode=none
  58. var connection = Configuration.GetConnectionString("MySqlConnection");
  59. //services.AddDbContextPool<PermissionContext>(options => options.UseMySql(connection)).AddEntityFrameworkMySql();
  60. services.AddDbContextPool<PermissionContext>(options => options.UseMySql(connection, b => b.MigrationsAssembly("Permission.Web"))).AddEntityFrameworkMySql();
  61. //var connection = Configuration.GetConnectionString("SqlServerConnection");
  62. //services.AddDbContextPool<PermissionContext>(options => options.UseSqlServer(connection));
  63. //AutoMapper
  64. services.AddSingleton<IMapper>(sp => _mapperConfiguration.CreateMapper());
  65. //DI
  66. AddDependencies(services);
  67. //services.AddMvc();
  68. services.Configure<Dictionary<string, string>>(Configuration.GetSection("Mime"));
  69. services.AddMvc(options =>
  70. {
  71. options.Filters.Add<HttpGlobalExceptionFilter>(); //全局异常
  72. }).AddJsonOptions(options =>
  73. {
  74. options.SerializerSettings.ContractResolver =
  75. new Newtonsoft.Json.Serialization.DefaultContractResolver();
  76. });
  77. //配置跨域处理
  78. services.AddCors(options =>
  79. {
  80. options.AddPolicy("any", builder =>
  81. {
  82. builder.AllowAnyOrigin() //允许任何来源的主机访问
  83. .AllowAnyMethod()
  84. .AllowAnyHeader()
  85. .AllowCredentials();//指定处理cookie
  86. });
  87. });
  88. services.AddUnitOfWork<PermissionContext>();
  89. //处理json序列化后字母大小写问题
  90. //services.AddMvc().AddJsonOptions(op =>
  91. //{
  92. // op.SerializerSettings.ContractResolver =
  93. // new Newtonsoft.Json.Serialization.DefaultContractResolver();
  94. // op.SerializerSettings.DateFormatString = "yyyy-MM-dd";
  95. // //忽略循环引用
  96. // //op.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
  97. //});
  98. services.AddMemoryCache();
  99. //Session 过期时长分钟
  100. var sessionOutTime = Configuration.GetValue<int>("WebConfig:SessionTimeOut", 60);
  101. //cookie
  102. services.AddAuthentication("QJAuthorizeCookie")
  103. .AddCookie("QJAuthorizeCookie", options =>
  104. {
  105. options.AccessDeniedPath = ""; //当用户尝试访问资源但没有通过任何授权策略时,这是请求会重定向的相对路径资源。
  106. options.LoginPath = "/Account/Login"; //当用户尝试访问资源但尚未认证时,这是请求重定向的相对路径。
  107. });
  108. //Use MemoryCache
  109. services.AddSingleton<IMemoryCache>(factory =>
  110. {
  111. var cache = new MemoryCache(new MemoryCacheOptions());
  112. return cache;
  113. });
  114. services.AddSingleton<ICacheService, MemoryCacheService>();
  115. //Session服务
  116. services.AddSession(options =>
  117. {
  118. // Set a short timeout for easy testing.
  119. options.IdleTimeout = TimeSpan.FromMinutes(sessionOutTime);
  120. //options.CookieHttpOnly = true;
  121. });
  122. services.Configure<IISOptions>(options =>
  123. {
  124. });
  125. }
  126. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  127. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, PermissionContext context, IOptions<Dictionary<string, string>> option)
  128. {
  129. loggerFactory.AddConsole(Configuration.GetSection("Logging"));
  130. loggerFactory.AddDebug();
  131. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//这是为了防止中文乱码
  132. loggerFactory.AddNLog();//添加NLog
  133. app.AddNLogWeb();
  134. env.ConfigureNLog("nlog.config");//读取Nlog配置文件
  135. LogManager.Configuration.Variables["connectionString"] = Configuration.GetConnectionString("MySqlConnection");
  136. if (env.IsDevelopment())
  137. {
  138. app.UseDeveloperExceptionPage();
  139. app.UseBrowserLink();
  140. }
  141. else
  142. {
  143. app.UseExceptionHandler("/Home/Error");
  144. }
  145. //app.UseDirectoryBrowser(new DirectoryBrowserOptions()
  146. //{
  147. // FileProvider = new PhysicalFileProvider(
  148. // Path.Combine(Directory.GetCurrentDirectory(), @"source")),
  149. // RequestPath = new PathString("/source/files")
  150. //});
  151. app.UseFileServer(new FileServerOptions()
  152. {
  153. FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"source")),
  154. RequestPath = new PathString("/source"),
  155. EnableDirectoryBrowsing = true
  156. });
  157. app.UseDefaultFiles();
  158. //app.UseStaticFiles();
  159. var provider = new FileExtensionContentTypeProvider();
  160. foreach (string key in option.Value.Keys)
  161. {
  162. provider.Mappings.Add(key, option.Value[key]);
  163. }
  164. app.UseStaticFiles(new StaticFileOptions() { ContentTypeProvider = provider });
  165. //use cookie
  166. app.UseAuthentication();
  167. app.UseSession();
  168. app.UseCors("any");
  169. app.UseMvc(routes =>
  170. {
  171. routes.MapRoute(
  172. name: "area",
  173. template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
  174. routes.MapRoute(
  175. name: "default",
  176. template: "{controller=Account}/{action=Login}/{id?}");
  177. });
  178. //数据库初始化
  179. DataInitializer.Init(context);
  180. }
  181. private IServiceCollection AddDependencies(IServiceCollection services)
  182. {
  183. //Repositories
  184. //services.AddSingleton(typeof(IRepository<SysUser>), typeof(Repository<SysUser>));
  185. //services.AddSingleton(typeof(IRepository<SysRole>), typeof(Repository<SysRole>));
  186. //services.AddSingleton(typeof(IRepository<SysMenu>), typeof(Repository<SysMenu>));
  187. //services.AddSingleton(typeof(IRepository<SysOrganize>), typeof(Repository<SysOrganize>));
  188. //services.AddScoped<PermissionContext>();
  189. services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
  190. //demo
  191. //services.AddSingleton<IRepository<DiskFolder>, Repository<DiskFolder>>();
  192. //services.AddSingleton<IRepository<DiskFile>, Repository<DiskFile>>();
  193. services.AddSingleton<IBaseRepository<SysUser>, BaseRepository<SysUser>>();
  194. services.AddSingleton<IBaseRepository<SysRole>, BaseRepository<SysRole>>();
  195. services.AddSingleton<IBaseRepository<SysMenu>, BaseRepository<SysMenu>>();
  196. services.AddSingleton<IBaseRepository<SysOrganize>, BaseRepository<SysOrganize>>();
  197. services.AddSingleton<IBaseRepository<SysDict>, BaseRepository<SysDict>>();
  198. services.AddSingleton<IBaseRepository<SysDictDetail>, BaseRepository<SysDictDetail>>();
  199. services.AddSingleton<IBaseRepository<ChartGroup>, BaseRepository<ChartGroup>>();
  200. services.AddSingleton<IBaseRepository<ChartGroupMessage>, BaseRepository<ChartGroupMessage>>();
  201. services.AddSingleton<IBaseRepository<ChartPersonMessage>, BaseRepository<ChartPersonMessage>>();
  202. services.AddSingleton<IBaseRepository<SystemType>, BaseRepository<SystemType>>();
  203. services.AddSingleton<IBaseRepository<SystemInfo>, BaseRepository<SystemInfo>>();
  204. services.AddSingleton<IBaseRepository<NewsType>, BaseRepository<NewsType>>();
  205. services.AddSingleton<IBaseRepository<NewsInfo>, BaseRepository<NewsInfo>>();
  206. services.AddSingleton<IBaseRepository<NewsFile>, BaseRepository<NewsFile>>();
  207. services.AddSingleton<IBaseRepository<SysLog>, BaseRepository<SysLog>>();
  208. services.AddSingleton<IBaseRepository<DiskFolder>, BaseRepository<DiskFolder>>();
  209. services.AddSingleton<IBaseRepository<DiskFile>, BaseRepository<DiskFile>>();
  210. //Services
  211. services.AddScoped<ISysUserService, SysUserService>();
  212. services.AddScoped<ISysMenuService, SysMenuService>();
  213. services.AddScoped<ISysRoleService, SysRoleService>();
  214. services.AddScoped<ISysOrganizeService, SysOrganizeService>();
  215. services.AddScoped<ISysDictService, SysDictService>();
  216. services.AddScoped<ISysDictDetailService, SysDictDetailService>();
  217. services.AddScoped<IChartGroupService, ChartGroupService>();
  218. services.AddScoped<INewsTypeService, NewsTypeService>();
  219. services.AddScoped<INewsInfoService, NewsInfoService>();
  220. services.AddScoped<ISystemTypeService, SystemTypeService>();
  221. services.AddScoped<ISystemInfoService, SystemInfoService>();
  222. services.AddScoped<ISysLogService, SysLogService>();
  223. services.AddScoped<IDiskFolderService, DiskFolderService>();
  224. services.AddScoped<IDiskFileService, DiskFileService>();
  225. services.AddScoped<IUserService, UserService>();
  226. services.AddScoped<UserService>();
  227. //services.AddScoped<SysUserService>();
  228. //services.AddScoped<SysRoleService>();
  229. //services.AddScoped<SysOrganizeService>();
  230. return services;
  231. }
  232. }
  233. }