如何解决redirectMode =“ ResponseRewrite”实际上如何工作?
编辑
因此,我设法通过在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 举报,一经查实,本站将立刻删除。