StartupExtensions.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. using System.Reflection;
  2. using CallCenter.Api.Exceptions;
  3. using CallCenter.Api.Filters;
  4. using CallCenter.Api.Realtimes;
  5. using CallCenter.Devices;
  6. using CallCenter.NewRock;
  7. using CallCenter.Repository.SqlSugar;
  8. using Mapster;
  9. using MapsterMapper;
  10. using MediatR;
  11. using Microsoft.OpenApi.Models;
  12. using XF.Domain.Dependency;
  13. using CallCenter.Application;
  14. using CallCenter.Application.Contracts;
  15. using CallCenter.CacheManager;
  16. using FluentValidation;
  17. using FluentValidation.AspNetCore;
  18. using CallCenter.Settings;
  19. using Serilog;
  20. namespace CallCenter.Api;
  21. internal static class StartupExtensions
  22. {
  23. const string CorsOrigins = "CorsOrigins";
  24. internal static WebApplication ConfigureServices(this WebApplicationBuilder builder)
  25. {
  26. var services = builder.Services;
  27. var configuration = builder.Configuration;
  28. services.AddHttpContextAccessor();
  29. #if DEBUG
  30. builder.WebHost.UseUrls("http://192.168.100.62:50001", "http://localhost:50001");
  31. #endif
  32. services.Configure<DeviceConfigs>(d => configuration.GetSection("DeviceConfigs").Bind(d));
  33. services.Configure<WorkTimeSettings>(d => configuration.GetSection("WorkTimeSettings").Bind(d));
  34. // Add services to the container.
  35. services
  36. .BatchInjectServices()
  37. .AddApplication()
  38. ;
  39. services.AddControllers(options =>
  40. {
  41. options.Filters.Add<TempTokenFilter>();
  42. options.Filters.Add<UnifyResponseFilter>();
  43. options.Filters.Add<UserFriendlyExceptionFilter>();
  44. });
  45. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
  46. services.AddEndpointsApiExplorer();
  47. services.AddSwaggerGen(c =>
  48. {
  49. //添加文档
  50. c.SwaggerDoc("v1", new OpenApiInfo() { Title = "WebApi", Version = "v1.0" });
  51. //使用反射获取xml文件,并构造出文件的路径
  52. var xmlFile = "Document.xml";
  53. var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
  54. // 启用xml注释. 该方法第二个参数启用控制器的注释,默认为false.
  55. c.IncludeXmlComments(xmlPath, true);
  56. });
  57. //signalR
  58. builder.Services.AddSignalR().AddStackExchangeRedis("redis.fengwo.com:6380", options =>
  59. {
  60. options.Configuration.ChannelPrefix = "callcenter:signalR:";
  61. });
  62. /* CORS */
  63. services.AddCors(options =>
  64. {
  65. options.AddPolicy(name: CorsOrigins,
  66. builder =>
  67. {
  68. var origins = configuration.GetSection("Cors:Origins").Get<string[]>();
  69. builder.SetIsOriginAllowed(a =>
  70. {
  71. return origins.Any(origin => origin.StartsWith("*.", StringComparison.Ordinal)
  72. ? a.EndsWith(origin[1..], StringComparison.Ordinal)
  73. : a.Equals(origin, StringComparison.Ordinal));
  74. })
  75. .AllowAnyHeader()
  76. .AllowAnyMethod()
  77. .AllowCredentials();
  78. });
  79. });
  80. //mapster
  81. var config = TypeAdapterConfig.GlobalSettings;
  82. services.AddSingleton(config);
  83. services.AddScoped<IMapper, ServiceMapper>();
  84. //mediatr
  85. services.AddMediatR(Assembly.GetExecutingAssembly(), typeof(ApplicationStartupExtensions).Assembly);
  86. //迅时IPPBX
  87. var deviceConfigs = configuration.GetSection("DeviceConfigs").Get<DeviceConfigs>();
  88. services.AddNewRock(deviceConfigs.Address);
  89. //sqlsugar
  90. services.AddSqlSugar(configuration, "CallCenter");
  91. //cache
  92. services.AddCache(d =>
  93. {
  94. d.ConnectionString = configuration.GetConnectionString("Redis");
  95. d.Prefix = "CallCenter";
  96. });
  97. //validator
  98. services.AddFluentValidationAutoValidation(config =>
  99. {
  100. config.DisableDataAnnotationsValidation = true;
  101. })
  102. .AddValidatorsFromAssembly(typeof(AppContractsStartupExtensions).Assembly);
  103. return builder.Build();
  104. }
  105. internal static WebApplication ConfigurePipelines(this WebApplication app)
  106. {
  107. app.UseSerilogRequestLogging();
  108. var swaggerEnable = app.Configuration.GetSection("Swagger").Get<bool>();
  109. // Configure the HTTP request pipeline.
  110. if (swaggerEnable)
  111. {
  112. app.UseSwagger();
  113. app.UseSwaggerUI();
  114. }
  115. app.UseCors(CorsOrigins);
  116. app.UseAuthorization();
  117. //app.MapHub<CallCenterHub>("/hubs/callcenter");
  118. //app.UseMiddleware<TempTokenMiddleware>();
  119. app.MapControllers();
  120. return app;
  121. }
  122. }