问题描述
编辑
因此,我设法通过在Application_Error
中定义Global.asax
方法并从此处调用Response.ClearContent
来修复它们。虽然不确定这是否会产生任何不良影响,所以仍对原始问题的答案感兴趣。 / EDIT
我已经使用<customErrors>
在Web.config中设置了redirectMode="ResponseRewrite"
元素。根据{{3}},这应该显示错误页面而不更改原始URL。
如果在诸如Page_Load
之类的页面事件中引发异常,此方法就很好,但是我注意到当您从.aspx文件中的内联代码块引发异常时,它将输出您拥有的所有内容在您的.aspx文件中,直到引发异常的行,然后将错误页面的内容附加到该行,从而导致客户端的垃圾总量。
使用Web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="~/error.aspx" redirectMode="ResponseRewrite" />
</system.web>
</configuration>
和error.aspx
页
<%@ Page Language="C#" AutoEventWireup="true" %>
<html>
<head></head>
<body>
An error occured
</body>
</html>
和引发异常的default.aspx
<%@ Page Language="C#" AutoEventWireup="true" %>
<% string s = null; %>
<html>
<head></head>
<body>
<strong>This is a test page.</strong>
<%= s[0] %>
</body>
</html>
在客户端的浏览器中请求default.aspx
将导致提供以下乱码的HTML
<html>
<head></head>
<body>
<strong>This is a test page.</strong>
<html>
<head></head>
<body>
An error occured
</body>
</html>
是否会发生这种情况,因为在此阶段会将default.aspx文件的HTML写入输出流中?如果是这样,是否仍然需要清除输出流的内容,以便仅将实际error.aspx
的内容发送给客户端?我尝试在错误页面的Page_Load中调用Response.ClearContent()
,但这没有任何效果。
除了诉诸redirectMode="ResponseRedirect"
之外,还有其他什么方法可以防止这种情况的发生吗?另外,如果我上面写的是正确的,那么redirectMode="ResponseRedirect"
在这种情况下如何工作?如果已经写入了输出流,那么必须已经发送了HTTP标头,对吧?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)