mirror of https://github.com/abpframework/abp
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							191 lines
						
					
					
						
							8.1 KiB
						
					
					
				
			
		
		
	
	
							191 lines
						
					
					
						
							8.1 KiB
						
					
					
				using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.IO;
 | 
						|
using System.Linq;
 | 
						|
using IdentityModel;
 | 
						|
using Microsoft.AspNetCore.Authentication.JwtBearer;
 | 
						|
using Microsoft.AspNetCore.Builder;
 | 
						|
using Microsoft.AspNetCore.Cors;
 | 
						|
using Microsoft.AspNetCore.DataProtection;
 | 
						|
using Microsoft.Extensions.Configuration;
 | 
						|
using Microsoft.Extensions.DependencyInjection;
 | 
						|
using Microsoft.Extensions.Hosting;
 | 
						|
using MyCompanyName.MyProjectName.EntityFrameworkCore;
 | 
						|
using MyCompanyName.MyProjectName.MultiTenancy;
 | 
						|
using StackExchange.Redis;
 | 
						|
using Microsoft.OpenApi.Models;
 | 
						|
using Volo.Abp;
 | 
						|
using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy;
 | 
						|
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
 | 
						|
using Volo.Abp.AspNetCore.Serilog;
 | 
						|
using Volo.Abp.AuditLogging.EntityFrameworkCore;
 | 
						|
using Volo.Abp.Autofac;
 | 
						|
using Volo.Abp.Caching;
 | 
						|
using Volo.Abp.Caching.StackExchangeRedis;
 | 
						|
using Volo.Abp.EntityFrameworkCore;
 | 
						|
using Volo.Abp.EntityFrameworkCore.SqlServer;
 | 
						|
using Volo.Abp.Localization;
 | 
						|
using Volo.Abp.Modularity;
 | 
						|
using Volo.Abp.MultiTenancy;
 | 
						|
using Volo.Abp.PermissionManagement.EntityFrameworkCore;
 | 
						|
using Volo.Abp.Security.Claims;
 | 
						|
using Volo.Abp.SettingManagement.EntityFrameworkCore;
 | 
						|
using Volo.Abp.Swashbuckle;
 | 
						|
using Volo.Abp.VirtualFileSystem;
 | 
						|
 | 
						|
namespace MyCompanyName.MyProjectName
 | 
						|
{
 | 
						|
    [DependsOn(
 | 
						|
        typeof(MyProjectNameApplicationModule),
 | 
						|
        typeof(MyProjectNameEntityFrameworkCoreModule),
 | 
						|
        typeof(MyProjectNameHttpApiModule),
 | 
						|
        typeof(AbpAspNetCoreMvcUiMultiTenancyModule),
 | 
						|
        typeof(AbpAutofacModule),
 | 
						|
        typeof(AbpCachingStackExchangeRedisModule),
 | 
						|
        typeof(AbpEntityFrameworkCoreSqlServerModule),
 | 
						|
        typeof(AbpAuditLoggingEntityFrameworkCoreModule),
 | 
						|
        typeof(AbpPermissionManagementEntityFrameworkCoreModule),
 | 
						|
        typeof(AbpSettingManagementEntityFrameworkCoreModule),
 | 
						|
        typeof(AbpAspNetCoreSerilogModule),
 | 
						|
        typeof(AbpSwashbuckleModule)
 | 
						|
        )]
 | 
						|
    public class MyProjectNameHttpApiHostModule : AbpModule
 | 
						|
    {
 | 
						|
        private const string DefaultCorsPolicyName = "Default";
 | 
						|
 | 
						|
        public override void ConfigureServices(ServiceConfigurationContext context)
 | 
						|
        {
 | 
						|
            var hostingEnvironment = context.Services.GetHostingEnvironment();
 | 
						|
            var configuration = context.Services.GetConfiguration();
 | 
						|
 | 
						|
            Configure<AbpDbContextOptions>(options =>
 | 
						|
            {
 | 
						|
                options.UseSqlServer();
 | 
						|
            });
 | 
						|
 | 
						|
            Configure<AbpMultiTenancyOptions>(options =>
 | 
						|
            {
 | 
						|
                options.IsEnabled = MultiTenancyConsts.IsEnabled;
 | 
						|
            });
 | 
						|
 | 
						|
            if (hostingEnvironment.IsDevelopment())
 | 
						|
            {
 | 
						|
                Configure<AbpVirtualFileSystemOptions>(options =>
 | 
						|
                {
 | 
						|
                    options.FileSets.ReplaceEmbeddedByPhysical<MyProjectNameDomainSharedModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Domain.Shared", Path.DirectorySeparatorChar)));
 | 
						|
                    options.FileSets.ReplaceEmbeddedByPhysical<MyProjectNameDomainModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Domain", Path.DirectorySeparatorChar)));
 | 
						|
                    options.FileSets.ReplaceEmbeddedByPhysical<MyProjectNameApplicationContractsModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Application.Contracts", Path.DirectorySeparatorChar)));
 | 
						|
                    options.FileSets.ReplaceEmbeddedByPhysical<MyProjectNameApplicationModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Application", Path.DirectorySeparatorChar)));
 | 
						|
                });
 | 
						|
            }
 | 
						|
 | 
						|
            context.Services.AddAbpSwaggerGenWithOAuth(
 | 
						|
                configuration["AuthServer:Authority"],
 | 
						|
                new Dictionary<string, string>
 | 
						|
                {
 | 
						|
                    {"MyProjectName", "MyProjectName API"}
 | 
						|
                },
 | 
						|
                options =>
 | 
						|
                {
 | 
						|
                    options.SwaggerDoc("v1", new OpenApiInfo {Title = "MyProjectName API", Version = "v1"});
 | 
						|
                    options.DocInclusionPredicate((docName, description) => true);
 | 
						|
                    options.CustomSchemaIds(type => type.FullName);
 | 
						|
                });
 | 
						|
 | 
						|
            Configure<AbpLocalizationOptions>(options =>
 | 
						|
            {
 | 
						|
                options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština"));
 | 
						|
                options.Languages.Add(new LanguageInfo("en", "en", "English"));
 | 
						|
                options.Languages.Add(new LanguageInfo("fr", "fr", "Français"));
 | 
						|
                options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar"));
 | 
						|
                options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português"));
 | 
						|
                options.Languages.Add(new LanguageInfo("ru", "ru", "Русский"));
 | 
						|
                options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe"));
 | 
						|
                options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
 | 
						|
                options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文"));
 | 
						|
            });
 | 
						|
 | 
						|
            context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
 | 
						|
                .AddJwtBearer(options =>
 | 
						|
                {
 | 
						|
                    options.Authority = configuration["AuthServer:Authority"];
 | 
						|
                    options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]);
 | 
						|
                    options.Audience = "MyProjectName";
 | 
						|
                });
 | 
						|
 | 
						|
            Configure<AbpDistributedCacheOptions>(options =>
 | 
						|
            {
 | 
						|
                options.KeyPrefix = "MyProjectName:";
 | 
						|
            });
 | 
						|
 | 
						|
            if (!hostingEnvironment.IsDevelopment())
 | 
						|
            {
 | 
						|
                var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]);
 | 
						|
                context.Services
 | 
						|
                    .AddDataProtection()
 | 
						|
                    .PersistKeysToStackExchangeRedis(redis, "MyProjectName-Protection-Keys");
 | 
						|
            }
 | 
						|
 | 
						|
            context.Services.AddCors(options =>
 | 
						|
            {
 | 
						|
                options.AddPolicy(DefaultCorsPolicyName, builder =>
 | 
						|
                {
 | 
						|
                    builder
 | 
						|
                        .WithOrigins(
 | 
						|
                            configuration["App:CorsOrigins"]
 | 
						|
                                .Split(",", StringSplitOptions.RemoveEmptyEntries)
 | 
						|
                                .Select(o => o.RemovePostFix("/"))
 | 
						|
                                .ToArray()
 | 
						|
                        )
 | 
						|
                        .WithAbpExposedHeaders()
 | 
						|
                        .SetIsOriginAllowedToAllowWildcardSubdomains()
 | 
						|
                        .AllowAnyHeader()
 | 
						|
                        .AllowAnyMethod()
 | 
						|
                        .AllowCredentials();
 | 
						|
                });
 | 
						|
            });
 | 
						|
        }
 | 
						|
 | 
						|
        public override void OnApplicationInitialization(ApplicationInitializationContext context)
 | 
						|
        {
 | 
						|
            var app = context.GetApplicationBuilder();
 | 
						|
            var env = context.GetEnvironment();
 | 
						|
 | 
						|
            if (env.IsDevelopment())
 | 
						|
            {
 | 
						|
                app.UseDeveloperExceptionPage();
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                app.UseErrorPage();
 | 
						|
                app.UseHsts();
 | 
						|
            }
 | 
						|
 | 
						|
            app.UseHttpsRedirection();
 | 
						|
            app.UseCorrelationId();
 | 
						|
            app.UseVirtualFiles();
 | 
						|
            app.UseRouting();
 | 
						|
            app.UseCors(DefaultCorsPolicyName);
 | 
						|
            app.UseAuthentication();
 | 
						|
            if (MultiTenancyConsts.IsEnabled)
 | 
						|
            {
 | 
						|
                app.UseMultiTenancy();
 | 
						|
            }
 | 
						|
            app.UseAbpRequestLocalization();
 | 
						|
            app.UseAuthorization();
 | 
						|
            app.UseSwagger();
 | 
						|
            app.UseAbpSwaggerUI(options =>
 | 
						|
            {
 | 
						|
                options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API");
 | 
						|
 | 
						|
                var configuration = context.GetConfiguration();
 | 
						|
                options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
 | 
						|
                options.OAuthClientSecret(configuration["AuthServer:SwaggerClientSecret"]);
 | 
						|
            });
 | 
						|
            app.UseAuditing();
 | 
						|
            app.UseAbpSerilogEnrichers();
 | 
						|
            app.UseConfiguredEndpoints();
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |