ASP.NET中处理自定义错误的最佳方式

要在ASP.NET中处理好自定义错误(Custom Errors)首先要抛弃使用web.config\customErrors。

<customErrors mode="RemoteOnly" defaultRedirect="/error/error.htm">
    <error statusCode="404" redirect="/error/404.htm" />
</customErrors>

使用web.config\customErrors最大的一个缺点是在显示自定义错误页面时会重定向:

http://www.cnblogs.com/error/error.htm?aspxerrorpath=/m/user/info.html

这会带来2个麻烦:

1. 会造成用户反馈问题时提供的是重定向后的URL。

2. 会造成用户无法通过刷新浏览器进行重试,或者问题解决后通过刷新浏览器恢复正常。

我们目前想到的最佳处理方式是在Global.asax.cs的Application_Error中进行处理。

protected void Application_Error(object sender, EventArgs e)
        {
            var lastError = Server.GetLastError();
            if (lastError != null)
            {
                var httpError = lastError as HttpException;
                if (httpError != null)
                {
                    //ASP.NET的400与404错误不记录日志,并都以自定义404页面响应
                    var httpCode = httpError.GetHttpCode();
                    if (httpCode == 400 || httpCode == 404)
                    {
                        Response.StatusCode = 404;//在IIS中配置自定义404页面
                        Server.ClearError();
                        return;
                    }
            // 增加日志保存 }
//对于路径错误不记录日志,并都以自定义404页面响应 if (lastError.TargetSite.ReflectedType == typeof(System.IO.Path)) { Response.StatusCode = 404; Server.ClearError(); return; } //增加日志保存 Response.StatusCode = 500; Server.ClearError(); } }

如果需要保存错误日志的话,可以在增加日志保存出增加你日志的写入代码

以上只是个人web测试后无误,仅供参考!!!

posted @ 2020-08-07 09:43  小温2597  阅读(185)  评论(0编辑  收藏  举报