加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 如何在抛出请求验证异常时显示自定义错误页面?

发布时间:2020-12-15 22:44:33 所属栏目:asp.Net 来源:网络整理
导读:我们为ASP.NET引发的异常配置了我们的自定义错误页面: customErrors mode="On" redirectMode="ResponseRewrite" error statusCode="400" redirect="~/400.aspx"/ error statusCode="404" redirect="~/404.aspx"/ error statusCode="500" redirect="~/500.as
我们为ASP.NET引发的异常配置了我们的自定义错误页面:
<customErrors mode="On" redirectMode="ResponseRewrite">
  <error statusCode="400" redirect="~/400.aspx"/>
  <error statusCode="404" redirect="~/404.aspx"/>
  <error statusCode="500" redirect="~/500.aspx"/>
</customErrors>

设置redirectMode =“ResponseRewrite”是重要的,因为它确保URL不会更改(我相信ASP.NET执行一个Server.Transfer而不是Response.Redirect).

不幸的是,这不适用于请求验证错误.例如,如果我导航到/ some / page /< script>,则启用了自定义错误. ASP.NET的请求验证启动并引发HttpException.但是,除了显示我的自定义错误页面,我会收到以下消息:

Server Error in ‘/’ Application.

Runtime Error

Description: An exception occurred while processing your request.
Additionally,another exception occurred while executing the custom
error page for the first exception. The request has been terminated.

为什么在这种情况下ASP.NET无法显示我的自定义错误页面?错误页面中没有代码,只是HTML,所以我知道错误页面本身没有抛出任何异常.

此外,如果我在Application_Error中自己捕获错误,并发出一个Server.Transfer它工作正常,所以我很好奇ASP.NET正在做的封面下.

如果我们自己处理这个问题,有没有比这更好的解决方案?

protected void Application_Error(object sender,EventArgs e)
{
    var ex = Server.GetLastError() as HttpException;
    if (ex != null 
        && ex.Message.StartsWith("A potentially dangerous Request.Path value was detected from the client")
        && HttpContext.Current.IsCustomErrorEnabled)
    {
        Server.Transfer("400.aspx");
    }
}

解决方法

为了确保您不会遗漏任何可能发生在您的webapp的错误代码,您可以添加默认错误页面:
<customErrors mode="On" defaultRedirect="Error.aspx" />

如果你只想捕获RequestValidationErrors,你可以在global.asax文件中处理它:

void Application_Error(object sender,EventArgs e)
 {
    Exception ex = Server.GetLastError();
    if (ex is HttpRequestValidationException)
    {
        Server.ClearError();
        Response.Redirect("RequestValidationError.aspx",false);
    }
 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读