From 8dcb70ea13044f6caef3384b02b510c386842608 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 2 May 2018 10:44:23 +0300 Subject: [PATCH] Added error page for the basic theme. --- .../Pages/Error/Index.cshtml | 39 ++++++++++++++++++ .../Pages/Error/Index.cshtml.cs | 40 +++++++++++++++++++ ...o.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj | 4 ++ ...bpApplicationBuilderErrorPageExtensions.cs | 14 +++++++ ....Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj | 4 ++ ...pNetCoreMvcApplicationBuilderExtensions.cs | 2 +- .../AbpExceptionHandlingMiddleware.cs | 2 +- 7 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Pages/Error/Index.cshtml create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Pages/Error/Index.cshtml.cs create mode 100644 src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/AbpApplicationBuilderErrorPageExtensions.cs diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Pages/Error/Index.cshtml b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Pages/Error/Index.cshtml new file mode 100644 index 0000000000..a20b9088ca --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Pages/Error/Index.cshtml @@ -0,0 +1,39 @@ +@page +@using Localization.Resources.AbpUi +@using Microsoft.AspNetCore.Mvc.Localization +@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Pages.Error +@model IndexModel +@inject IHtmlLocalizer L +@{ + var errorMessage = Model.ErrorInfo.Message; + var errorDetails = Model.ErrorInfo.Details; + if (errorDetails.IsNullOrEmpty()) + { + errorDetails = errorMessage; + errorMessage = L["Error"].Value; + } +} + +

+ [@Model.HttpStatusCode] @errorMessage +

+ +
+

+ @errorDetails +

+

+ @if (!Model.ErrorInfo.ValidationErrors.IsNullOrEmpty()) + { + foreach (var validationError in Model.ErrorInfo.ValidationErrors) + { + * @(validationError.Message) + if (validationError.Members != null && validationError.Members.Any()) + { + (@string.Join(", ", validationError.Members)) + } +
+ } + } +

+
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Pages/Error/Index.cshtml.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Pages/Error/Index.cshtml.cs new file mode 100644 index 0000000000..fc83f40012 --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Pages/Error/Index.cshtml.cs @@ -0,0 +1,40 @@ +using System; +using Microsoft.AspNetCore.Diagnostics; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Volo.Abp.AspNetCore.Mvc.ExceptionHandling; +using Volo.Abp.Http; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Pages.Error +{ + public class IndexModel : PageModel + { + public RemoteServiceErrorInfo ErrorInfo { get; set; } + + [BindProperty(SupportsGet = true)] + public int HttpStatusCode { get; set; } + + private readonly IExceptionToErrorInfoConverter _errorInfoConverter; + + public IndexModel(IExceptionToErrorInfoConverter errorInfoConverter) + { + _errorInfoConverter = errorInfoConverter; + } + + public void OnGet() + { + var exHandlerFeature = HttpContext.Features.Get(); + + var exception = exHandlerFeature != null + ? exHandlerFeature.Error + : new Exception("Unhandled exception!"); //TODO: Localize? + + ErrorInfo = _errorInfoConverter.Convert(exception); + + if (HttpStatusCode == 0) + { + HttpStatusCode = HttpContext.Response.StatusCode; + } + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj index 2c97dd8040..00820a092d 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj @@ -19,6 +19,10 @@ + + + + diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/AbpApplicationBuilderErrorPageExtensions.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/AbpApplicationBuilderErrorPageExtensions.cs new file mode 100644 index 0000000000..d98187335f --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/AbpApplicationBuilderErrorPageExtensions.cs @@ -0,0 +1,14 @@ +using Microsoft.AspNetCore.Builder; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared +{ + public static class AbpApplicationBuilderErrorPageExtensions + { + public static IApplicationBuilder UseErrorPage(this IApplicationBuilder app) + { + return app + .UseStatusCodePagesWithRedirects("~/Error?httpStatusCode={0}") + .UseExceptionHandler("/Error"); + } + } +} diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj index 6379a37f98..f5c7df6a68 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj @@ -17,6 +17,10 @@ + + + + diff --git a/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Builder/AbpAspNetCoreMvcApplicationBuilderExtensions.cs b/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Builder/AbpAspNetCoreMvcApplicationBuilderExtensions.cs index 1bb1095bd5..91d0df29bb 100644 --- a/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Builder/AbpAspNetCoreMvcApplicationBuilderExtensions.cs +++ b/src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Builder/AbpAspNetCoreMvcApplicationBuilderExtensions.cs @@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Builder .UseMiddleware(); } - public static IApplicationBuilder UseAbpExceptionHandling(this IApplicationBuilder app) //TODO: Should this go to + public static IApplicationBuilder UseAbpExceptionHandling(this IApplicationBuilder app) { //Prevent multiple add if (app.Properties.ContainsKey("_AbpExceptionHandlingMiddleware_Added")) //TODO: Constant diff --git a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionHandlingMiddleware.cs b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionHandlingMiddleware.cs index 071ca10d23..fa611b426c 100644 --- a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionHandlingMiddleware.cs +++ b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionHandlingMiddleware.cs @@ -44,7 +44,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling if (httpContext.Items["_AbpActionInfo"] is AbpActionInfoInHttpContext actionInfo) { - if (actionInfo.IsObjectResult) + if (actionInfo.IsObjectResult) //TODO: Align with AbpExceptionFilter.ShouldHandleException! { await HandleAndWrapException(httpContext, ex); return;