Browse Source

Added error page

pull/997/head
Alper Ebicoglu 8 years ago
parent
commit
7a7980a8db
  1. 20
      modules/docs/app/Volo.DocsTestApp/DocsTestAppModule.cs
  2. 11
      modules/docs/app/Volo.DocsTestApp/Pages/Error.cshtml
  3. 57
      modules/docs/app/Volo.DocsTestApp/Pages/Error.cshtml.cs

20
modules/docs/app/Volo.DocsTestApp/DocsTestAppModule.cs

@ -3,8 +3,11 @@ using System.Diagnostics;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Diagnostics;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@ -100,13 +103,17 @@ namespace Volo.DocsTestApp
{ {
options.DefaultThemeName = BasicTheme.Name; options.DefaultThemeName = BasicTheme.Name;
}); });
Configure<RazorPagesOptions>(options =>
{
options.Conventions.AddPageRoute("/Error", "error/{statusCode}");
});
} }
public override void OnApplicationInitialization(ApplicationInitializationContext context) public override void OnApplicationInitialization(ApplicationInitializationContext context)
{ {
var app = context.GetApplicationBuilder(); var app = context.GetApplicationBuilder();
var env = context.GetEnvironment();
app.UseDeveloperExceptionPage();
app.UseVirtualFiles(); app.UseVirtualFiles();
@ -120,7 +127,14 @@ namespace Volo.DocsTestApp
app.UseRequestLocalization(app.ApplicationServices.GetRequiredService<IOptions<RequestLocalizationOptions>>().Value); app.UseRequestLocalization(app.ApplicationServices.GetRequiredService<IOptions<RequestLocalizationOptions>>().Value);
app.UseStatusCodePagesWithReExecute("/error/{0}"); if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseStatusCodePagesWithReExecute("/error/{0}");
}
app.UseMvc(routes => app.UseMvc(routes =>
{ {

11
modules/docs/app/Volo.DocsTestApp/Pages/Error.cshtml

@ -0,0 +1,11 @@
@page
@model Volo.DocsTestApp.Pages.ErrorModel
@{
<div class="text-center">
<pre>
@Model.ErrorMessage
</pre>
<a href="/" class="btn btn-outline-primary">Home Page</a>
</div>
}

57
modules/docs/app/Volo.DocsTestApp/Controllers/ErrorController.cs → modules/docs/app/Volo.DocsTestApp/Pages/Error.cshtml.cs

@ -1,43 +1,59 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Net; using System.Net;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Diagnostics;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Serilog; using Serilog;
using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
using Volo.Abp.Domain.Entities;
namespace Volo.DocsTestApp.Controllers namespace Volo.DocsTestApp.Pages
{ {
public class ErrorController : AbpController public class ErrorModel : AbpPageModel
{ {
[Route("error/{statusCode}")] public string ErrorMessage { get; set; }
[HttpGet]
public IActionResult Index(int statusCode = 0) public async Task<ActionResult> OnGetAsync(string statusCode)
{ {
if (!int.TryParse(statusCode, out var errorStatusCode))
{
errorStatusCode = (int)HttpStatusCode.BadRequest;
}
var statusFeature = HttpContext.Features.Get<IStatusCodeReExecuteFeature>(); var statusFeature = HttpContext.Features.Get<IStatusCodeReExecuteFeature>();
if (statusFeature != null) if (statusFeature != null)
{ {
Log.Warning("Handled {0} error for URL: {1}", statusCode, statusFeature.OriginalPath); Log.Warning("Handled {0} error for URL: {1}", statusCode, statusFeature.OriginalPath);
} }
var isValidStatusCode = Enum.IsDefined(typeof(HttpStatusCode), statusCode); var exceptionHandlerPathFeature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();
if (!isValidStatusCode) if (exceptionHandlerPathFeature != null)
{ {
statusCode = (int)HttpStatusCode.BadRequest; var exception = exceptionHandlerPathFeature.Error;
var path = exceptionHandlerPathFeature.Path;
if (exception is EntityNotFoundException)
{
ErrorMessage = exception.Message;
return Page();
}
} }
return new ContentResult var isValidStatusCode = Enum.IsDefined(typeof(HttpStatusCode), errorStatusCode);
if (!isValidStatusCode)
{ {
ContentType = System.Net.Mime.MediaTypeNames.Text.Html, errorStatusCode = (int)HttpStatusCode.BadRequest;
StatusCode = statusCode, }
Content = string.Format(HtmlBody, _errorMessages.ContainsKey(statusCode)
? _errorMessages[statusCode]
: "Looks like something went wrong!")
};
}
private const string HtmlBody = "<html><body><div style='text-align:center'><pre>{0}</pre><a href='/'>Go to home page</a></div></body></html>"; ErrorMessage = _errorMessages.ContainsKey(errorStatusCode)
? _errorMessages[errorStatusCode]
: "Looks like something went wrong!";
return Page();
}
#region Error Messages
/*For more ASCII arts http://patorjk.com/software/taag/#p=display&h=0&f=Big&t=400*/ /*For more ASCII arts http://patorjk.com/software/taag/#p=display&h=0&f=Big&t=400*/
private readonly Dictionary<int, string> _errorMessages = new Dictionary<int, string> private readonly Dictionary<int, string> _errorMessages = new Dictionary<int, string>
{ {
@ -84,7 +100,7 @@ This is a forbidden area!"
| | | |_| | | | | | | |_| | | |
|_| \___/ |_| |_| \___/ |_|
We can't find the page you're looking for..." Hmm, we couldn't find the page you're looking for..."
}, },
{ {
500, 500,
@ -123,5 +139,6 @@ Ooops! Our server is experiencing a mild case of the hiccups."
Looks like we're having some server issues." Looks like we're having some server issues."
} }
}; };
#endregion
} }
} }
Loading…
Cancel
Save