Browse Source

Added error page for the basic theme.

pull/279/head
Halil İbrahim Kalkan 9 years ago
parent
commit
8dcb70ea13
  1. 39
      src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Pages/Error/Index.cshtml
  2. 40
      src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Pages/Error/Index.cshtml.cs
  3. 4
      src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj
  4. 14
      src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/AbpApplicationBuilderErrorPageExtensions.cs
  5. 4
      src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj
  6. 2
      src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Builder/AbpAspNetCoreMvcApplicationBuilderExtensions.cs
  7. 2
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionHandlingMiddleware.cs

39
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<AbpUiResource> L
@{
var errorMessage = Model.ErrorInfo.Message;
var errorDetails = Model.ErrorInfo.Details;
if (errorDetails.IsNullOrEmpty())
{
errorDetails = errorMessage;
errorMessage = L["Error"].Value;
}
}
<h1>
[@Model.HttpStatusCode] @errorMessage
</h1>
<div>
<p>
@errorDetails
</p>
<p>
@if (!Model.ErrorInfo.ValidationErrors.IsNullOrEmpty())
{
foreach (var validationError in Model.ErrorInfo.ValidationErrors)
{
<text>* </text>@(validationError.Message)
if (validationError.Members != null && validationError.Members.Any())
{
<text>(@string.Join(", ", validationError.Members))</text>
}
<br />
}
}
</p>
</div>

40
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<IExceptionHandlerFeature>();
var exception = exHandlerFeature != null
? exHandlerFeature.Error
: new Exception("Unhandled exception!"); //TODO: Localize?
ErrorInfo = _errorInfoConverter.Convert(exception);
if (HttpStatusCode == 0)
{
HttpStatusCode = HttpContext.Response.StatusCode;
}
}
}
}

4
src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj

@ -19,6 +19,10 @@
<EmbeddedResource Include="Views\**\*.cshtml" />
<EmbeddedResource Include="wwwroot\**\*.*" />
</ItemGroup>
<ItemGroup>
<Content Remove="Pages\Error\Index.cshtml" />
</ItemGroup>
<ItemGroup>
<None Remove="web.config" />

14
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");
}
}
}

4
src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj

@ -17,6 +17,10 @@
<ItemGroup>
<EmbeddedResource Include="wwwroot\**\*.*" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="2.0.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.AspNetCore.Mvc.UI.Bootstrap\Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj" />

2
src/Volo.Abp.AspNetCore.Mvc/Microsoft/AspNetCore/Builder/AbpAspNetCoreMvcApplicationBuilderExtensions.cs

@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Builder
.UseMiddleware<AbpUnitOfWorkMiddleware>();
}
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

2
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;

Loading…
Cancel
Save