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.aspx"/> </customErrors> 设置redirectMode =“ResponseRewrite”是重要的,因为它确保URL不会更改(我相信ASP.NET执行一个Server.Transfer而不是Response.Redirect). 不幸的是,这不适用于请求验证错误.例如,如果我导航到/ some / page /< script>,则启用了自定义错误. ASP.NET的请求验证启动并引发HttpException.但是,除了显示我的自定义错误页面,我会收到以下消息:
为什么在这种情况下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);
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – Kendo Grid导出到Excel – 所有页面都不起作
- asp-classic – 经典ASP中的Cookie.HTTPOnly
- 如何将纯文本发布到ASP.NET Web API端点?
- asp.net – ImageButton不会在IE10上发回帖子
- .net – 修改MVC 5中的密码长度
- asp.net – VB.NET接口
- asp.net-mvc – 如何利用Resharper的“导航到控制器方法”功
- 为什么我的iSeries / ASP.NET MVC 4应用程序中没有重复使用
- asp.net-mvc – asp.net mvc – string或int的路由(即/ typ
- asp.net – 如何在KeyUp上进行文本框回发?
