using System.Reflection; using CallCenter.Api.Exceptions; using CallCenter.Api.Filters; using CallCenter.Api.Realtimes; using CallCenter.Devices; using CallCenter.NewRock; using CallCenter.Repository.SqlSugar; using Mapster; using MapsterMapper; using MediatR; using Microsoft.OpenApi.Models; using XF.Domain.Dependency; using CallCenter.Application; using CallCenter.Application.Contracts; using CallCenter.CacheManager; using FluentValidation; using FluentValidation.AspNetCore; using CallCenter.Settings; using Serilog; namespace CallCenter.Api; internal static class StartupExtensions { const string CorsOrigins = "CorsOrigins"; internal static WebApplication ConfigureServices(this WebApplicationBuilder builder) { var services = builder.Services; var configuration = builder.Configuration; services.AddHttpContextAccessor(); #if DEBUG builder.WebHost.UseUrls("http://192.168.100.62:50001", "http://localhost:50001"); #endif services.Configure(d => configuration.GetSection("DeviceConfigs").Bind(d)); services.Configure(d => configuration.GetSection("WorkTimeSettings").Bind(d)); // Add services to the container. services .BatchInjectServices() .AddApplication() ; services.AddControllers(options => { options.Filters.Add(); options.Filters.Add(); options.Filters.Add(); }); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle services.AddEndpointsApiExplorer(); services.AddSwaggerGen(c => { //添加文档 c.SwaggerDoc("v1", new OpenApiInfo() { Title = "WebApi", Version = "v1.0" }); //使用反射获取xml文件,并构造出文件的路径 var xmlFile = "Document.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); // 启用xml注释. 该方法第二个参数启用控制器的注释,默认为false. c.IncludeXmlComments(xmlPath, true); }); //signalR builder.Services.AddSignalR().AddStackExchangeRedis("redis.fengwo.com:6380", options => { options.Configuration.ChannelPrefix = "callcenter:signalR:"; }); /* CORS */ services.AddCors(options => { options.AddPolicy(name: CorsOrigins, builder => { var origins = configuration.GetSection("Cors:Origins").Get(); builder.SetIsOriginAllowed(a => { return origins.Any(origin => origin.StartsWith("*.", StringComparison.Ordinal) ? a.EndsWith(origin[1..], StringComparison.Ordinal) : a.Equals(origin, StringComparison.Ordinal)); }) .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); }); //mapster var config = TypeAdapterConfig.GlobalSettings; services.AddSingleton(config); services.AddScoped(); //mediatr services.AddMediatR(Assembly.GetExecutingAssembly(), typeof(ApplicationStartupExtensions).Assembly); //迅时IPPBX var deviceConfigs = configuration.GetSection("DeviceConfigs").Get(); services.AddNewRock(deviceConfigs.Address); //sqlsugar services.AddSqlSugar(configuration, "CallCenter"); //cache services.AddCache(d => { d.ConnectionString = configuration.GetConnectionString("Redis"); d.Prefix = "CallCenter"; }); //validator services.AddFluentValidationAutoValidation(config => { config.DisableDataAnnotationsValidation = true; }) .AddValidatorsFromAssembly(typeof(AppContractsStartupExtensions).Assembly); return builder.Build(); } internal static WebApplication ConfigurePipelines(this WebApplication app) { app.UseSerilogRequestLogging(); var swaggerEnable = app.Configuration.GetSection("Swagger").Get(); // Configure the HTTP request pipeline. if (swaggerEnable) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseCors(CorsOrigins); app.UseAuthorization(); //app.MapHub("/hubs/callcenter"); //app.UseMiddleware(); app.MapControllers(); return app; } }