Asp.net IIS7和2008服务器在代码隐藏时手动设置ResponseCode失败

Asp.net IIS7和2008服务器在代码隐藏时手动设置ResponseCode失败,asp.net,iis-7,iis-6,windows-server-2008,Asp.net,Iis 7,Iis 6,Windows Server 2008,一年前,我开发了一个网络应用程序,旨在与IIS6合作。 现在我们转到IIS7,我想,我应该做一些集成测试 其中一个失败: 该web应用程序或多或少是一个搜索引擎,当没有任何结果或数据容器尚未加载时,会给出404或500(感谢您的google advisor…)。对于IIS6,这非常有效:页面输出为例如result.aspx,显示一些消息并返回指定的http状态(设置为codebehind)。 现在对于IIS7,这种行为被打破了:如果我将http状态代码设置为codebehind,我的页面将不再被

一年前,我开发了一个网络应用程序,旨在与IIS6合作。 现在我们转到IIS7,我想,我应该做一些集成测试

其中一个失败:
该web应用程序或多或少是一个搜索引擎,当没有任何结果或数据容器尚未加载时,会给出404或500(感谢您的google advisor…)。对于IIS6,这非常有效:页面输出为例如result.aspx,显示一些消息并返回指定的http状态(设置为codebehind)。
现在对于IIS7,这种行为被打破了:如果我将http状态代码设置为codebehind,我的页面将不再被交付——而是显示IIS7的通用错误页面

不,我不想对customErrors部分进行任何肮脏的攻击。。。 我只想恢复原来的行为
有没有办法做到这一点

编辑:
考虑以下页面

<%@ Page Language="C#" AutoEventWireup="true"%>

<script runat="server">
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        this.Response.StatusCode = 404;
    }
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        This page should be displayed
    </div>
    </form>
</body>
</html>

受保护的覆盖无效加载(事件参数e)
{
基础荷载(e);
this.Response.StatusCode=404;
}
应显示此页面
Vista+IIS7=正常

2008 Server+IIS7=一般错误页面

您的问题可能是在开始发送响应正文(即页面内容)后的某个时间点,您试图设置状态代码(作为标题的一部分),在您的情况下是消息

要解决这个问题,您可以尝试将Response.Buffer设置为true,然后如果必须设置404/500响应代码,则在设置响应代码之前调用Response.Clear()


请注意,如果您发送的是404/500,则响应通常不应有正文(尽管HTTP规范允许)

您的问题可能是您试图设置状态代码(作为标题的一部分)在您开始发送响应主体(即您的页面内容)之后的某个时间点,在您的情况下,发送消息

要解决这个问题,您可以尝试将Response.Buffer设置为true,然后如果必须设置404/500响应代码,则在设置响应代码之前调用Response.Clear()

请注意,如果您发送的是404/500,则响应通常不应有正文(尽管HTTP规范允许这样做)

您是否尝试过以下方法:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    this.Response.StatusCode = 404;

    Response.TrySkipIisCustomErrors = true;
}

您是否尝试过以下方法:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    this.Response.StatusCode = 404;

    Response.TrySkipIisCustomErrors = true;
}

我将状态代码设置为@OnLoad(我在这里联系我的Web服务)。页面的输出通常在Render方法中进行。我不想用不同的消息清除我的初始响应,这是一个正常的结果页。您是否尝试打开response.Buffer(但不清除响应)并查看其是否有效?否-我将此设置为true。response.Buffer没有帮助。。。我从不清除我的响应-只设置状态代码。我将状态代码设置为@OnLoad(我联系我的Web服务的地方)。页面的输出通常在Render方法中进行。我不想用不同的消息清除我的初始响应,这是一个正常的结果页。您是否尝试打开response.Buffer(但不清除响应)并查看其是否有效?否-我将此设置为true。response.Buffer没有帮助。。。我从不清除我的响应-只需设置状态码。呵呵。。。没有-还没有。。。我明天就试试看!呵呵。。。没有-还没有。。。我明天就试试看!