171 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			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();
							 | 
						|||
| 
								 | 
							
								            //}
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |