d_sms_service/APT.MicroApi/APT.OP.WebApi/Startup.cs
2024-10-28 13:45:58 +08:00

171 lines
6.1 KiB
C#

using APT.Data.NewDb;
using APT.Infrastructure.Api;
using APT.Infrastructure.Core;
using APT.Infrastructure.Core.Utils;
using APT.Infrastructure.EF;
using APT.Infrastructure.EF.Extensions;
using APT.Infrastructure.EF.Infrastructure;
using APT.Migrations;
using APT.OP.WebApi;
using APT.PF.WebApi.App_Start;
using APT.PF.WebApi.Models;
using Autofac;
using AutoMapper;
using log4net;
using log4net.Config;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Newtonsoft.Json;
using System.IO;
using System.Text.Encodings.Web;
using System.Text.Unicode;
using ConfigurationManager = APT.Infrastructure.Api.ConfigurationManager;
namespace APT.PF.WebApi
{
public partial class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
var repository = LogManager.GetRepository
(System.Reflection.Assembly.GetEntryAssembly());
var fileInfo = new FileInfo("log4net.config");
if (!fileInfo.Exists)
fileInfo = new FileInfo(Path.Combine(System.AppContext.BaseDirectory, "log4net.config"));
XmlConfigurator.Configure(repository, fileInfo);
ConfigurationManager.Register(configuration);
InitUtils.Init();
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<TenantInfo>();
services.AddScoped<IConnectionResolver, HttpHeaderSqlConnectionResolver>();
services.AddScoped<IConnectionGenerator, CombindedConnectionGenerator>();
services.AddSqlServerPerConnection<EfDbContext>(settings =>
{
settings.ConnectionPrefix = "";
});
// services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.Configure<KestrelServerOptions>(options =>
{
options.AllowSynchronousIO = true;
});
//services.AddMvc();
//解决Multipart body length limit 134217728 exceeded
services.Configure<FormOptions>(x =>
{
x.ValueLengthLimit = int.MaxValue;
x.MultipartBodyLengthLimit = int.MaxValue; // In case of multipart
});
services.AddCors(o => o.AddPolicy("AllowAllPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
//automapper
//AutoMapper.IConfigurationProvider config = new MapperConfiguration(cfg =>
//{
// cfg.AddProfile<MappingProfile>();
//});
AutoMapper.Configuration.MapperConfigurationExpression expression = new AutoMapper.Configuration.MapperConfigurationExpression();
expression.AddProfile(typeof(MappingProfile));
Mapper.Initialize(expression);
//services.AddSingleton(config);
//services.AddScoped<IMapper, Mapper>();
services.AddResponseCompression();
//
services.AddMvc(option => option.EnableEndpointRouting = false)
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
options.SerializerSettings.ContractResolver = new JsonContractResolver();
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
});
services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.All));
//UpdateDatabase();
services.RegisterBearAuth();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
Infrastructure.Api.HttpContext.Register(app.ApplicationServices.
GetRequiredService<IHttpContextAccessor>()
);
app.UseCors("AllowAllPolicy");
app.UseAuthentication();
app.UseHttpsRedirection();
app.UseResponseCompression();
app.UseMiddleware<TenantInfoMiddleware>();
app.UseMvc();
app.UseStaticFiles();
UpdateDatabase();
////fMOrganizationService.SetOrgCache();
//CheckLinse();
//APT.PF.WebApi.Utils.WebSokectHelper.Init();
}
public virtual void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterComponents();
}
private static void UpdateDatabase()
{
using (var context = new MigrationContext())
{
context.Database.Migrate();
}
//using (var context = new NewDbContext())
//{
// context.Database.Migrate();
//}
}
}
}