• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NET Core中显示自定义错误页面-增强版

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

之前的博文 ASP.NET Core中显示自定义错误页面 中的方法是在项目中硬编码实现的,当有多个项目时,就会造成不同项目之间的重复代码,不可取。

在这篇博文中改用middleware实现,并且放在独立的项目中发布成NuGet包,项目中使用时只需安装NuGet包,然后在Startup的Configure()方法中添加如下的一行代码。

app.UseCustomErrorPages();

CustomErrorPagesMiddleware的实现代码如下:

public class CustomErrorPagesMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger _logger;

    public CustomErrorPagesMiddleware(
        RequestDelegate next,
        ILoggerFactory loggerFactory)
    {
        _next = next;
        _logger = loggerFactory.CreateLogger<CustomErrorPagesMiddleware>();
    }

    public async Task Invoke(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (Exception ex)
        {
            _logger.LogError(0, ex, "An unhandled exception has occurred while executing the request");

            if (context.Response.HasStarted)
            {
                _logger.LogWarning("The response has already started, the error page middleware will not be executed.");
                throw;
            }
            try
            {
                context.Response.Clear();
                context.Response.StatusCode = 500;
                return;
            }
            catch (Exception ex2)
            {
                _logger.LogError(0, ex2, "An exception was thrown attempting to display the error page.");
            }
            throw;
        }
        finally
        {
            var statusCode = context.Response.StatusCode;
            if (statusCode == 404 || statusCode == 500)
            {
                await ErrorPage.ResponseAsync(context.Response, statusCode);
            }
        }
    }
}

ErrorPage的实现代码如下:

public static class ErrorPage
{
    public static async Task ResponseAsync(HttpResponse response, int statusCode)
    {
        if (statusCode == 404)
        {
            await response.WriteAsync(Page404);
        }
        else if (statusCode == 500)
        {
            await response.WriteAsync(Page500);
        }
    }

    private static string Page404 => @"html...";

    private static string Page500 => @"html...";
}

CustomErrorPagesExtensions的实现代码如下:

public static class CustomErrorPagesExtensions
{
    public static IApplicationBuilder UseCustomErrorPages(this IApplicationBuilder app)
    {
        if (app == null)
        {
            throw new ArgumentNullException(nameof(app));
        }

        return app.UseMiddleware<CustomErrorPagesMiddleware>();
    }
}

代码参考自:

1)CustomErrorPagesMiddleware.cs

2)DeveloperExceptionPageMiddleware.cs


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
asp.net c# 断点续传 下载 Accept-Ranges发布时间:2022-07-10
下一篇:
ASP.NETMVC与ASP.NETWebAPI的区别发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap