namespace Framework.Server { using Framework.Config; using Framework.DataAccessLayer.DatabaseMemory; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Rewrite; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; /// /// ASP.NET Core configuration. /// public static class StartupFramework { internal const string CookieName = "FrameworkSession"; // Session cookie. public static void ConfigureServices(IServiceCollection services) { // Dependency Injection DI. See also https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.1 services.AddSingleton(); // Needed for IIS. Otherwise new HttpContextAccessor(); results in null reference exception. services.AddSingleton(); services.AddDistributedMemoryCache(); services.AddSession(options => { options.Cookie.Name = CookieName; options.IdleTimeout = TimeSpan.FromSeconds(5 * 60); // Session expire 5 minutes }); } public static void Configure(IApplicationBuilder applicationBuilder) { UtilServer.ApplicationBuilder = applicationBuilder; var configServer = ConfigServer.Load(); if (UtilServer.IsIssServer == false) { // Running in Visual Studio environment. if (configServer.IsServerSideRendering) { UtilServer.StartUniversalServerAngular(); } } if (configServer.IsUseDeveloperExceptionPage) { applicationBuilder.UseDeveloperExceptionPage(); } applicationBuilder.UseDefaultFiles(); // Used for index.html applicationBuilder.UseStaticFiles(); // Enable access to files in folder wwwwroot. applicationBuilder.UseSession(); // IsRedirectWww if (configServer.IsRedirectWww) { // Rewrite for example workplacex.org to www.workplacex.org // Do not rewrite for example demo.workplacex.org // See also: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/url-rewriting?view=aspnetcore-5.0 var domainNameList = new List(); foreach (var website in configServer.WebsiteList) { foreach (var domainName in website.DomainNameList) { if (domainName.DomainName.StartsWith("www.")) { domainNameList.Add(domainName.DomainName.Substring("www.".Length)); } } } var options = new RewriteOptions(); if (domainNameList.Count > 0) { options = options.AddRedirectToWww(domainNameList.ToArray()); } // options = options.AddRedirect("(.*[^/])$", "$1/"); // Enforce trailing slash. For example /path becomes /path/ // Be aware! /abc.js becomes /abc.js/ applicationBuilder.UseRewriter(options); } // IsRedirectHttps if (configServer.IsRedirectHttps) { // Enforce HTTPS in ASP.NET Core https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-5.0&tabs=visual-studio applicationBuilder.UseHsts(); applicationBuilder.UseHttpsRedirection(); } applicationBuilder.Run(new Request().RunAsync); } } }