颐和api

Startup.cs 9.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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 Pivotal.Discovery.Client;
  12. using NLog.Web;
  13. using NLog.Extensions.Logging;
  14. using Microsoft.IdentityModel.Tokens;
  15. using System.Text;
  16. using Microsoft.AspNetCore.Authentication.JwtBearer;
  17. using MadRunFabric.Common;
  18. using MadRunFabric.Common.Options;
  19. using Microsoft.AspNetCore.Authorization;
  20. using Api.SignToken;
  21. using Microsoft.AspNetCore.Mvc.Versioning;
  22. using AutoMapper;
  23. using System.IdentityModel.Tokens.Jwt;
  24. using WorkOrderApi.IRepositories;
  25. using WorkOrderApi.Repositories;
  26. using ConfigurationApi.IRepositories;
  27. using ConfigurationApi.Repositories;
  28. using SignTokenApi.IRepositories;
  29. using SignTokenApi.Repositories;
  30. namespace WorkOrderApi
  31. {
  32. public class Startup
  33. {
  34. public Startup(IHostingEnvironment env)
  35. {
  36. Configuration = new ConfigurationBuilder()
  37. .SetBasePath(env.ContentRootPath)
  38. .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
  39. .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
  40. .AddEnvironmentVariables()
  41. .Build();
  42. }
  43. public IConfiguration Configuration { get; }
  44. // This method gets called by the runtime. Use this method to add services to the container.
  45. public void ConfigureServices(IServiceCollection services)
  46. {
  47. #region Cors 配置
  48. //生产环境 的cors
  49. services.AddCors(options =>
  50. {
  51. options.AddPolicy("CorsProd",
  52. builder => builder.AllowAnyOrigin()
  53. //builder => builder.WithOrigins(Configuration["Cors"].Split(','))
  54. .AllowAnyMethod()
  55. .AllowAnyHeader()
  56. .AllowCredentials()
  57. .SetPreflightMaxAge(TimeSpan.FromMinutes(30)));
  58. });
  59. //开发环境的cors
  60. services.AddCors(options =>
  61. {
  62. options.AddPolicy("CorsDev",
  63. builder => builder.AllowAnyOrigin()
  64. .AllowAnyMethod()
  65. .AllowAnyHeader()
  66. .AllowCredentials().SetPreflightMaxAge(TimeSpan.FromMinutes(30)));
  67. });
  68. #endregion
  69. #region 授权配置
  70. //读取jwt配置文件
  71. var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:SecretKey"].ToString()));
  72. var tokenValidationParameters = new TokenValidationParameters
  73. {
  74. ValidateIssuerSigningKey = true,
  75. IssuerSigningKey = signingKey,
  76. ValidateIssuer = true,
  77. ValidIssuer = Configuration["Jwt:Issuer"].ToString(),//发行人
  78. ValidateAudience = true,
  79. ValidAudience = Configuration["Jwt:Audience"].ToString(),//订阅人
  80. ValidateLifetime = true,
  81. ClockSkew = TimeSpan.Zero,
  82. RequireExpirationTime = true,
  83. };
  84. services.AddAuthentication(options =>
  85. {
  86. options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
  87. options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
  88. })
  89. .AddJwtBearer(o =>
  90. {
  91. o.RequireHttpsMetadata = false;
  92. o.TokenValidationParameters = tokenValidationParameters;
  93. o.Events = new JwtBearerEvents
  94. {
  95. OnTokenValidated = context =>
  96. {
  97. if (context.Request.Path.Value.ToString() == "/api/logout")
  98. {
  99. var token = ((context as TokenValidatedContext).SecurityToken as JwtSecurityToken).RawData;
  100. }
  101. return Task.CompletedTask;
  102. }
  103. };
  104. });
  105. #endregion
  106. #region redis配置
  107. services.AddDistributedRedisCache(options =>
  108. {
  109. options.InstanceName = Configuration["Redis:InstanceName"].ToString();
  110. options.Configuration = $"{Configuration["Redis:HostName"].ToString()}:{Configuration["Redis:Port"].ToString()},allowAdmin=true,password={Configuration["Redis:Password"].ToString()},defaultdatabase={Configuration["Redis:Defaultdatabase"].ToString()}";
  111. });
  112. #endregion
  113. #region configuration
  114. services.AddSingleton<IConfiguration>(Configuration);
  115. #endregion
  116. //注入授权Handler
  117. services.AddSingleton<IAuthorizationHandler, PermissionAuthorizationHandler>();
  118. services.AddSingleton<IPermissionService, PermissionService>();
  119. services.AddSingleton<ISignTokenService, SignTokenService>();
  120. services.AddTransient<IBus_WorkOrder_BaseRepository, Bus_WorkOrder_BaseRepository>();
  121. services.AddTransient<IBus_WorkOrder_ItemRepository, Bus_WorkOrder_ItemRepository>();
  122. services.AddTransient<ICus_Customer_BaseRepository, Cus_Customer_BaseRepository>();
  123. services.AddTransient<ICus_Customer_ProjectRepository, Cus_Customer_ProjectRepository>();
  124. services.AddTransient<ConfigurationApi.IRepositories.ISys_DictionaryValueRepository, ConfigurationApi.Repositories.Sys_DictionaryValueRepository>();
  125. services.AddTransient<ICus_FollowRecordRepository, Cus_FollowRecordRepository>();
  126. services.AddTransient<IBus_Msg_ListRepository, Bus_Msg_ListRepository>();
  127. services.AddTransient<ICus_AuthManageRepository, Cus_AuthManageRepository>();
  128. services.AddTransient<SignTokenApi.IRepositories.ISys_User_AccountRepository, SignTokenApi.Repositories.Sys_User_AccountRepository>();
  129. services.AddTransient<ICus_AuthOrderRepository, Cus_AuthOrderRepository>();
  130. services.AddTransient<SignTokenApi.IRepositories.ISys_DepartmentRepository, SignTokenApi.Repositories.Sys_DepartmentRepository>();
  131. services.AddTransient<ConfigurationApi.IRepositories.ISys_ProvincesRepository, ConfigurationApi.Repositories.Sys_ProvincesRepository>();
  132. services.AddTransient<ConfigurationApi.IRepositories.ISys_CityRepository, ConfigurationApi.Repositories.Sys_CityRepository>();
  133. services.AddTransient<IHis_OpeRecordsRepository, His_OpeRecordsRepository>();
  134. #region 版本控制
  135. services.AddApiVersioning(Options =>
  136. {
  137. Options.ReportApiVersions = true;//可选,为true API返回响应标头中支持的版本信息
  138. Options.ApiVersionReader = new QueryStringApiVersionReader(parameterName: "api-version");
  139. Options.AssumeDefaultVersionWhenUnspecified = true;
  140. Options.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(6, 0);
  141. });
  142. #endregion
  143. #region AutoMapper
  144. services.AddAutoMapper();
  145. #endregion
  146. services.AddMvc(options =>
  147. {
  148. //options.Filters.Add(new ActionFilter());
  149. //options.Filters.Add(new ExceptionFilter());
  150. }).AddJsonOptions(op => op.SerializerSettings.ContractResolver =
  151. new Newtonsoft.Json.Serialization.DefaultContractResolver());
  152. #region Mongodb配置
  153. services.Configure<MongodbOptions>(options =>
  154. {
  155. options.ConnectionString = Configuration.GetSection("MongoConnection:ConnectionString").Value;
  156. options.Database = Configuration.GetSection("MongoConnection:Database").Value;
  157. });
  158. #endregion
  159. #region steeltoe
  160. services.AddDiscoveryClient(Configuration);
  161. #endregion
  162. #region 对接配置
  163. services.Configure<HisOptions>(options =>
  164. {
  165. options.HisAddress = Configuration.GetSection("his:hisaddress").Value;
  166. });
  167. #endregion
  168. }
  169. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  170. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
  171. {
  172. if (env.IsProduction())
  173. {
  174. app.UseCors("CorsProd");
  175. }
  176. else
  177. {
  178. app.UseCors("CorsDev");
  179. app.UseDeveloperExceptionPage();
  180. app.UseDatabaseErrorPage();
  181. app.UseBrowserLink();
  182. }
  183. app.UseAuthentication();
  184. app.UseMvc();
  185. #region steeltoe
  186. app.UseDiscoveryClient();
  187. #endregion
  188. #region Nlog 引入
  189. loggerFactory.AddNLog();//添加NLog
  190. env.ConfigureNLog("nlog.config");//读取Nlog配置文件
  191. app.AddNLogWeb();
  192. #endregion
  193. }
  194. }
  195. }