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 (将#修改为@)