using System; using System.Linq; using System.Reflection; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Castle.Facilities.Logging; using Abp.AspNetCore; using Abp.AspNetCore.Mvc.Antiforgery; using Abp.Castle.Logging.Log4Net; using Abp.Extensions; using VberAdmin.Configuration; using VberAdmin.Identity; using Abp.AspNetCore.SignalR.Hubs; using Abp.Dependency; using Abp.Json; using Microsoft.Extensions.Hosting; using Microsoft.OpenApi.Models; using Newtonsoft.Json.Serialization; using System.IO; using Swashbuckle.AspNetCore.SwaggerUI; using VberAdmin.Swagger; namespace VberAdmin.Web.Host.Startup; public class Startup { private const string _defaultCorsPolicyName = "localhost"; private const string _apiVersion = "v1"; private readonly IConfigurationRoot _appConfiguration; private readonly IWebHostEnvironment _hostingEnvironment; public Startup(IWebHostEnvironment env) { _hostingEnvironment = env; _appConfiguration = env.GetAppConfiguration(); } public IServiceProvider ConfigureServices(IServiceCollection services) { //MVC services.AddControllersWithViews( options => { options.Filters.Add(new AbpAutoValidateAntiforgeryTokenAttribute()); } ).AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new AbpMvcContractResolver(IocManager.Instance) { NamingStrategy = new CamelCaseNamingStrategy() }; }); IdentityRegistrar.Register(services); AuthConfigurer.Configure(services, _appConfiguration); services.AddSignalR(); // Configure CORS for angular2 UI services.AddCors( options => options.AddPolicy( _defaultCorsPolicyName, builder => builder .WithOrigins( // App:CorsOrigins in appsettings.json can contain more than one address separated by comma. _appConfiguration["App:CorsOrigins"] .Split(",", StringSplitOptions.RemoveEmptyEntries) .Select(o => o.RemovePostFix("/")) .ToArray() ) .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials() ) ); // Swagger - Enable this line and the related lines in Configure method to enable swagger UI services.ConfigureSwagger(_hostingEnvironment); // Configure Abp and Dependency Injection return services.AddAbp( // Configure Log4Net logging options => options.IocManager.IocContainer.AddFacility( f => f.UseAbpLog4Net().WithConfig(_hostingEnvironment.IsDevelopment() ? "log4net.config" : "log4net.Production.config" ) ) ); } public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { app.UseAbp(options => { options.UseAbpRequestLocalization = false; }); // Initializes ABP framework. app.UseCors(_defaultCorsPolicyName); // Enable CORS! app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAbpRequestLocalization(); app.UseEndpoints(endpoints => { endpoints.MapHub("/signalr"); endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}"); endpoints.MapControllerRoute("defaultWithArea", "{area}/{controller=Home}/{action=Index}/{id?}"); }); app.Use_SwaggerUI(Assembly.GetExecutingAssembly(), "VberAdmin.Web.Host"); } }