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();
 | 
						|
            //}
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |