尝试发送404响应不会触发IIS 404页面

时间:2014-03-21 06:19:14

标签: c# asp.net

我有一个ASP.NET页面(使用.NET 4.0框架),它只会在非常特定的情况下返回数据。剩下的时间我希望它返回一个404错误,就像页面不存在一样(那里有一个整个故事,一半落后于原因)。

为此,作为一个例子,我有一个Page_Load处理程序,如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Request.QueryString.AllKeys.Contains<string>("q"))
    {
        Response.Clear();
        Response.StatusCode = 404;
        Response.End();
    }
}

我原本希望这会触发IIS的404页面,因为我没有设置任何customError页面。相反,我收到404响应和没有内容的页面。

我还尝试了一个替代路径,将上面的Response代码放入Application_Error中的Global.asax处理程序中,并创建一个自定义异常以抛出我需要炸弹的事件的页面,但这导致获得一个未处理的异常页面。

我只是误解了这应该如何运作,还是我错过了一个非常明显的步骤?

修改

只是为了让它更清晰 - 我知道当IIS向请求发回404响应时,它还会发回少量HTML内容,从而产生包含以下内容的页面:

Server Error in '/' Application.

The resource cannot be found.

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 

Requested URL: /doesntexist.aspx

1 个答案:

答案 0 :(得分:0)

我发现我无法使用ASPX页面实现此目的。但是,我可以使用HttpHandler来实现。在处理程序中,如果我设置context.Response.StatusCode = 404,那么我会得到我期望的默认IIS 404页面。

此页面确实存在 - 它是IIS生成的简短,信息丰富的HTML代码段,因为它将404发送出去,以便最终用户不会收到空白页。