From 739fa4ced2f971298ff4e7ab077306562146c827 Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 1 Sep 2024 10:19:44 +0800 Subject: [PATCH] Use razor paeg to return error pages. --- .../Volo.Abp.AspNetCore.MultiTenancy.csproj | 5 + .../AbpAspNetCoreMultiTenancyOptions.cs | 15 +- ...ultiTenancyMiddlewareErrorPage.Designer.cs | 96 ++++++ .../MultiTenancyMiddlewareErrorPage.cshtml | 28 ++ .../MultiTenancyMiddlewareErrorPageModel.cs | 14 + .../Volo.Abp.AspNetCore.Mvc.csproj | 5 + .../Mvc/Libs/AbpMvcLibsErrorPage.Designer.cs | 50 ++++ .../Mvc/Libs/AbpMvcLibsErrorPage.cshtml | 22 ++ .../AspNetCore/Mvc/Libs/AbpMvcLibsService.cs | 19 +- .../RazorViews/AbpCompilationRazorPageBase.cs | 283 ++++++++++++++++++ .../AspNetCore/RazorViews/AttributeValue.cs | 34 +++ .../Abp/AspNetCore/RazorViews/HelperResult.cs | 19 ++ .../Volo.Abp.Cli.Core.csproj | 1 + .../Volo/Abp/Cli/AbpCliCoreModule.cs | 1 + .../Abp/Cli/Commands/GenerateRazorPage.cs | 227 ++++++++++++++ 15 files changed, 793 insertions(+), 26 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/Views/MultiTenancyMiddlewareErrorPage.Designer.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/Views/MultiTenancyMiddlewareErrorPage.cshtml create mode 100644 framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/Views/MultiTenancyMiddlewareErrorPageModel.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsErrorPage.Designer.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsErrorPage.cshtml create mode 100644 framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/RazorViews/AbpCompilationRazorPageBase.cs create mode 100644 framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/RazorViews/AttributeValue.cs create mode 100644 framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/RazorViews/HelperResult.cs create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateRazorPage.cs diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj index 42a1facb98..5daa9a3794 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj @@ -23,4 +23,9 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyOptions.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyOptions.cs index 95efaf2d0c..938d66e0c1 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyOptions.cs +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyOptions.cs @@ -16,6 +16,8 @@ using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Microsoft.Net.Http.Headers; +using Volo.Abp.AspNetCore.MultiTenancy.Views; +using Volo.Abp.AspNetCore.RazorViews; using Volo.Abp.Http; using Volo.Abp.Json; using Volo.Abp.MultiTenancy; @@ -67,7 +69,7 @@ public class AbpAspNetCoreMultiTenancyOptions } } - context.Response.Headers.Add("Abp-Tenant-Resolve-Error", HtmlEncoder.Default.Encode(exception.Message)); + context.Response.Headers.Append("Abp-Tenant-Resolve-Error", HtmlEncoder.Default.Encode(exception.Message)); if (isCookieAuthentication && context.Request.Method.Equals("Get", StringComparison.OrdinalIgnoreCase) && !context.Request.IsAjax()) { context.Response.Redirect(context.Request.GetEncodedUrl()); @@ -131,18 +133,11 @@ public class AbpAspNetCoreMultiTenancyOptions } else { - context.Response.StatusCode = (int)HttpStatusCode.NotFound; - context.Response.ContentType = "text/html"; - var message = exception.Message; var details = exception is BusinessException businessException ? businessException.Details : string.Empty; - await context.Response.WriteAsync($"\r\n"); - await context.Response.WriteAsync($"

{HtmlEncoder.Default.Encode(message)}

{HtmlEncoder.Default.Encode(details!)}
\r\n"); - await context.Response.WriteAsync("\r\n"); - - // Note the 500 spaces are to work around an IE 'feature' - await context.Response.WriteAsync(new string(' ', 500)); + var errorPage = new MultiTenancyMiddlewareErrorPage(new MultiTenancyMiddlewareErrorPageModel(message, details!)); + await errorPage.ExecuteAsync(context); } return true; diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/Views/MultiTenancyMiddlewareErrorPage.Designer.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/Views/MultiTenancyMiddlewareErrorPage.Designer.cs new file mode 100644 index 0000000000..751eec21bb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/Views/MultiTenancyMiddlewareErrorPage.Designer.cs @@ -0,0 +1,96 @@ +// +#pragma warning disable 1591 +namespace Volo.Abp.AspNetCore.RazorViews +{ + #line hidden + using System; + using System.Threading.Tasks; +#nullable restore +#line 1 "MultiTenancyMiddlewareErrorPage.cshtml" +using System.Globalization; + +#line default +#line hidden +#nullable disable +#nullable restore +#line 2 "MultiTenancyMiddlewareErrorPage.cshtml" +using Volo.Abp.AspNetCore.MultiTenancy.Views; + +#line default +#line hidden +#nullable disable +#nullable restore +#line 3 "MultiTenancyMiddlewareErrorPage.cshtml" +using Volo.Abp.AspNetCore.RazorViews; + +#line default +#line hidden +#nullable disable + internal class MultiTenancyMiddlewareErrorPage : AbpCompilationRazorPageBase + { + #pragma warning disable 1998 + public async override global::System.Threading.Tasks.Task ExecuteAsync() + { +#nullable restore +#line 5 "MultiTenancyMiddlewareErrorPage.cshtml" + + Response.ContentType = "text/html; charset=utf-8"; + Response.StatusCode = 404; + +#line default +#line hidden +#nullable disable + WriteLiteral("\n"); + WriteLiteral("\n