public static IApplicationBuilder UseHood(this IApplicationBuilder app, IWebHostEnvironment env, IConfiguration config) { CultureInfo.DefaultThreadCurrentCulture = CultureInfo.GetCultureInfo("en-GB"); CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.GetCultureInfo("en-GB"); if (env.EnvironmentName == "Development" || env.EnvironmentName == "Hood") { app.UseDeveloperExceptionPage(); app.UseMigrationsEndPoint(); } else { app.UseExceptionHandler("/error/500"); app.UseStatusCodePagesWithReExecute("/error/{0}"); } var provider = new FileExtensionContentTypeProvider(); provider.Mappings[".md"] = "text/markdown"; provider.Mappings[".webmanifest"] = "text/json"; app.UseStaticFiles(new StaticFileOptions() { HttpsCompression = Microsoft.AspNetCore.Http.Features.HttpsCompressionMode.Compress, ContentTypeProvider = provider, OnPrepareResponse = ctx => { ctx.Context.Response.Headers["Cache-Control"] = "max-age=600"; } }); app.UseRouting(); app.UseCors(); // Activate url helpers var httpContextAccessor = app.ApplicationServices.GetRequiredService <IHttpContextAccessor>(); UrlHelpers.Configure(httpContextAccessor); if (config.IsDatabaseConnected()) { app.UseAuthentication(); app.UseAuthorization(); var cookieName = config["Identity:Cookies:Name"].IsSet() ? config["Identity:Cookies:Name"] : Constants.CookieDefaultName; var builder = new CookieBuilder() { Name = $".{cookieName}.Session" }; builder.Expiration = TimeSpan.FromMinutes(config.GetValue("Session:Timeout", 60)); app.UseSession(new SessionOptions() { IdleTimeout = builder.Expiration.Value, Cookie = builder }); } app.UseHoodComponents(env, config); app.UseHoodDefaultRoutes(config); return(app); }