颐和api

Startup.cs 9.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Builder;
  6. using Microsoft.AspNetCore.Hosting;
  7. using Microsoft.Extensions.Configuration;
  8. using Microsoft.Extensions.DependencyInjection;
  9. using Microsoft.Extensions.Logging;
  10. using Microsoft.Extensions.Options;
  11. using Microsoft.AspNetCore.Authorization;
  12. using Api.SignToken;
  13. using Microsoft.IdentityModel.Tokens;
  14. using System.Text;
  15. using System.Security.Claims;
  16. using Microsoft.AspNetCore.Authentication.JwtBearer;
  17. using System.IdentityModel.Tokens.Jwt;
  18. using Pivotal.Discovery.Client;
  19. using NLog.Extensions.Logging;
  20. using NLog.Web;
  21. using Microsoft.AspNetCore.Mvc.Versioning;
  22. using MadRunFabric.Common.Options;
  23. using AutoMapper;
  24. using MessageApi.IRepositories;
  25. using MessageApi.Repositories;
  26. namespace SignTokenApi
  27. {
  28. public class Startup
  29. {
  30. public Startup(IHostingEnvironment env)
  31. {
  32. Configuration = new ConfigurationBuilder()
  33. .SetBasePath(env.ContentRootPath)
  34. .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
  35. .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
  36. .AddEnvironmentVariables()
  37. .Build();
  38. }
  39. public IConfiguration Configuration { get; }
  40. // This method gets called by the runtime. Use this method to add services to the container.
  41. public void ConfigureServices(IServiceCollection services)
  42. {
  43. #region Cors 配置
  44. //生产环境 的cors
  45. services.AddCors(options =>
  46. {
  47. options.AddPolicy("CorsProd",
  48. builder => builder.AllowAnyOrigin()
  49. //builder => builder.WithOrigins(Configuration["Cors"].Split(','))
  50. .AllowAnyMethod()
  51. .AllowAnyHeader()
  52. .AllowCredentials().SetPreflightMaxAge(TimeSpan.FromMinutes(30)));
  53. });
  54. //开发环境的cors
  55. services.AddCors(options =>
  56. {
  57. options.AddPolicy("CorsDev",
  58. builder => builder.AllowAnyOrigin()
  59. .AllowAnyMethod()
  60. .AllowAnyHeader()
  61. .AllowCredentials().SetPreflightMaxAge(TimeSpan.FromMinutes(30)));
  62. });
  63. #endregion
  64. #region 授权配置
  65. //读取jwt配置文件
  66. var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:SecretKey"].ToString()));
  67. var tokenValidationParameters = new TokenValidationParameters
  68. {
  69. ValidateIssuerSigningKey = true,
  70. IssuerSigningKey = signingKey,
  71. ValidateIssuer = true,
  72. ValidIssuer = Configuration["Jwt:Issuer"].ToString(),//发行人
  73. ValidateAudience = true,
  74. ValidAudience = Configuration["Jwt:Audience"].ToString(),//订阅人
  75. ValidateLifetime = true,
  76. ClockSkew = TimeSpan.Zero,
  77. RequireExpirationTime = true,
  78. };
  79. services.AddAuthentication(options =>
  80. {
  81. options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
  82. options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
  83. })
  84. .AddJwtBearer(o =>
  85. {
  86. o.RequireHttpsMetadata = false;
  87. o.TokenValidationParameters = tokenValidationParameters;
  88. o.Events = new JwtBearerEvents
  89. {
  90. OnTokenValidated = context =>
  91. {
  92. if (context.Request.Path.Value.ToString() == "/api/logout")
  93. {
  94. var token = ((context as TokenValidatedContext).SecurityToken as JwtSecurityToken).RawData;
  95. }
  96. return Task.CompletedTask;
  97. }
  98. };
  99. });
  100. #endregion
  101. #region redis配置
  102. services.AddDistributedRedisCache(options =>
  103. {
  104. options.InstanceName = Configuration["Redis:InstanceName"].ToString();
  105. options.Configuration = $"{Configuration["Redis:HostName"].ToString()}:{Configuration["Redis:Port"].ToString()},allowAdmin=true,password={Configuration["Redis:Password"].ToString()},defaultdatabase={Configuration["Redis:Defaultdatabase"].ToString()}";
  106. });
  107. #endregion
  108. services.AddSingleton<IConfiguration>(Configuration);
  109. //注入授权Handler
  110. services.AddSingleton<IAuthorizationHandler, PermissionAuthorizationHandler>();
  111. services.AddSingleton<IPermissionService, PermissionService>();
  112. #region 版本控制
  113. services.AddApiVersioning(Options =>
  114. {
  115. Options.ReportApiVersions = true;//可选,为true API返回响应标头中支持的版本信息
  116. Options.ApiVersionReader = new QueryStringApiVersionReader(parameterName: "api-version");
  117. Options.AssumeDefaultVersionWhenUnspecified = true;
  118. Options.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(6, 0);
  119. });
  120. #endregion
  121. #region AutoMapper
  122. services.AddAutoMapper();
  123. #endregion
  124. services.AddMvc().AddJsonOptions(op => op.SerializerSettings.ContractResolver =
  125. new Newtonsoft.Json.Serialization.DefaultContractResolver());
  126. #region Mongodb配置
  127. services.Configure<MongodbOptions>(options =>
  128. {
  129. options.ConnectionString = Configuration.GetSection("MongoConnection:ConnectionString").Value;
  130. options.Database = Configuration.GetSection("MongoConnection:Database").Value;
  131. });
  132. #endregion
  133. services.AddSingleton<ISignTokenService, SignTokenService>();
  134. services.AddTransient<IApp_ApplicationsVersionRepository, App_ApplicationsVersionRepository>();
  135. services.AddTransient<IApp_Version3DRepository, App_Version3DRepository>();
  136. services.AddTransient<ISys_User_LoginLogsRepository, Sys_User_LoginLogsRepository>();
  137. services.AddTransient<IWo_Repair_BaseRepository, Wo_Repair_BaseRepository>();
  138. services.AddTransient<IWo_Maintain_BaseRepository, Wo_Maintain_BaseRepository>();
  139. services.AddTransient<IWo_Maintain_PlanRepository, Wo_Maintain_PlanRepository>();
  140. services.AddTransient<IWo_EquipmentRunningRepository, Wo_EquipmentRunningRepository>();
  141. services.AddTransient<IEqp_Equipment_InfoRepository, Eqp_Equipment_InfoRepository>();
  142. services.AddTransient<IWo_Order_User_MapRepository, Wo_Order_User_MapRepository>();
  143. services.AddTransient<IWo_TimeOutRepository, Wo_TimeOutRepository>();
  144. services.AddTransient<ISys_Role_InfoRepository, Sys_Role_InfoRepository>();
  145. services.AddTransient<ISys_User_AccountRepository, Sys_User_AccountRepository>();
  146. services.AddTransient<ISys_NewsRepository, Sys_NewsRepository>();
  147. services.AddTransient<IWo_MattersRepository, Wo_MattersRepository>();
  148. services.AddTransient<IDistri_WorkorderRepository, Distri_WorkorderRepository>();
  149. services.AddTransient<IDistri_Workorder_PlanTaskRepository, Distri_Workorder_PlanTaskRepository>();
  150. //排班
  151. services.AddTransient<ISys_ClassGroupRepository, Sys_ClassGroupRepository>();
  152. services.AddTransient<ISys_ClassGroup_User_MapRepository, Sys_ClassGroup_User_MapRepository>();
  153. services.AddTransient<ISys_Msg_NoticeInfoRepository, Sys_Msg_NoticeInfoRepository>();
  154. services.AddTransient<ISchedule_ReminderRepository, Schedule_ReminderRepository>();
  155. services.AddTransient<IusercoldandclintidRepository, usercoldandclintidRepository>();
  156. #region steeltoe
  157. services.AddDiscoveryClient(Configuration);
  158. #endregion
  159. }
  160. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  161. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
  162. {
  163. if (env.IsProduction())
  164. {
  165. app.UseCors("CorsProd");
  166. }
  167. else
  168. {
  169. app.UseCors("CorsDev");
  170. app.UseDeveloperExceptionPage();
  171. app.UseDatabaseErrorPage();
  172. app.UseBrowserLink();
  173. }
  174. app.UseAuthentication();
  175. app.UseMvc();
  176. #region steeltoe
  177. app.UseDiscoveryClient();
  178. #endregion
  179. #region Nlog 引入
  180. loggerFactory.AddNLog();//添加NLog
  181. env.ConfigureNLog("nlog.config");//读取Nlog配置文件
  182. app.AddNLogWeb();
  183. #endregion
  184. }
  185. }
  186. }