private ViewResult ShowWebsiteErrorPage() { try { string errorPageFileLocation = Configuration.CustomRouting.GetErrorPageFile(); errorPageFileLocation = Globalization.GlobalizeView(errorPageFileLocation, Request); return(View(errorPageFileLocation)); // Custom error page from the theme will be served. } catch (Exception ex) { throw new CustomRoutingException(ex); // This will eventually raise the Fatal Error Page in Production mode. } }
public IActionResult Index() { try { // Test, whether the installation was already completed and database was seeded if (!Configuration.InstallationCompleted()) { return(RedirectToAction("Index", "Install", new { area = "admin" })); } string rawUrl = Request.Path; // Gets ie.: /MyController/MyActionName, WITHOUT HOST NAME // In the startup.cs there is: app.UseExceptionHandler("/Views/Shared/_FatalError.cshtml"). // We don't want to look in custom rounting system for this url and just serve it as is. // This error view will be returned usually in case of syntax error in view file. TempData["ErrorInPageLevelCode"] = "1"; if (rawUrl == "/Views/Shared/_FatalError.cshtml") { return(View(rawUrl)); } // Let's test whether we can connect to the database try { // If there is any error with the connection, this statement will throw exception. (((_dataServicePublic.Database as DatabaseContext).Database).GetService <IDatabaseCreator>() as RelationalDatabaseCreator).Exists(); } catch (Exception) { //return ShowWebsiteErrorPage(); --> this will show theme error page TempData["ExceptionMessage"] = new DatabaseConnectionFailureException(); return(View("_FatalError", UpdateModel())); // This page shows different output for production setting } string file; // helper variable for storing physical file adress for custom routing system if (Configuration.CustomRouting.IsHomePage(rawUrl)) // For the main (index) page only { string viewToReturn = Configuration.CustomRouting.GetHomePageFile(); // throws CustomRouting exception when view is not found viewToReturn = Globalization.GlobalizeView(viewToReturn, Request); // current culture is fetched and requested view name changed to e.x. : Index.{culture}.cshtml return(View(viewToReturn)); } else if (!string.IsNullOrEmpty(file = Configuration.CustomRouting.MapUrlToFile(rawUrl))) // Custom mapping for non-index pages, throws exception if view is not found { // if urlRewriting is disabled + request for article page + request has parameter Id => id has to be // supplied for article view model if (!Configuration.WebsiteConfig.UrlRewriting && UrlRewriting.CompareUrls(rawUrl, Configuration.WebsiteConfig.ArticleRoute)) { string queryId; if (!string.IsNullOrEmpty(queryId = Request.Query["id"].ToString())) { try { file = Globalization.GlobalizeView(file, Request); return(View(file, Convert.ToInt32(queryId))); } catch { // program will continue } } } // the requested file could be something other than .cshtml view (robots.txt etc.) if (file.EndsWith(".txt")) { return(Content(System.IO.File.ReadAllText(file))); } file = Globalization.GlobalizeView(file, Request);// current culture is fetched and requested view name changed to e.x. : About.{culture}.cshtml return(View(file)); } // --------------URL REWRITING FOR ARTICLES----------------------------------------------------------------- // first condition checks whether is URL rewriting allowed in theme jasper.json else if (Configuration.WebsiteConfig.UrlRewriting && UrlRewriting.IsUrlRewriteRequest(rawUrl)) { int articleIdFromRequest = UrlRewriting.ReturnArticleIdFromNiceUrl(rawUrl, _dataServicePublic); if (articleIdFromRequest != -1) // appropriate articleId was found in the DB { string articleFileLocation = Configuration.WebsiteConfig.ArticleFile; string physicalFileLocation = Configuration.CustomRouting.RelativeThemePathToRootRelativePath(articleFileLocation); physicalFileLocation = Globalization.GlobalizeView(physicalFileLocation, Request); return(View(physicalFileLocation, articleIdFromRequest)); // this returns view based one path: ie: /Themes/Jasper/Article.cshtml and passes model data. } else // URL rewriting rule for current article request does not exist { // Return Article view and pass Null instead of Id --> view itself will handle the null value and show ie.: article not found string articleFileLocation = Configuration.WebsiteConfig.ArticleFile; string physicalFileLocation = Configuration.CustomRouting.RelativeThemePathToRootRelativePath(articleFileLocation); physicalFileLocation = Globalization.GlobalizeView(physicalFileLocation, Request); return(View(physicalFileLocation, null)); } } // --------------END URL REWRITING FOR ARTICLES-------------------------------------------------------------- else // page was not found { bool isRequestFromAdminArea = (rawUrl.ToLower()).StartsWith("/admin", false, System.Globalization.CultureInfo.CurrentCulture) ? true : false; if (isRequestFromAdminArea) { // Admin error page if (!Env.Hosting.IsDevelopment()) { return(RedirectToAction("Error", "Home", new { area = "admin" })); // URL will be changed } // return View("~/Areas/Admin/Views/Shared/_Error.cshtml"); // URL will remain the same else { return(View()); } } else { // Website error page if (!Env.Hosting.IsDevelopment()) { return(ShowWebsiteErrorPage()); } else { return(View()); // ASP.NET error page will be shown } } } } catch (Exception ex) { TempData["ExceptionMessage"] = ex; return(View("_FatalError", UpdateModel())); } }