微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

redirectMode =“ ResponseRewrite”实际上如何工作?

如何解决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 举报,一经查实,本站将立刻删除。