【问题标题】:Trying to send a 404 response does not trigger IIS 404 page尝试发送 404 响应不会触发 IIS 404 页面
【发布时间】:2014-03-21 06:19:14
【问题描述】:

我有一个 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 代码放入Global.asax 中的Application_Error 处理程序中,并创建一个自定义异常以在我需要轰出页面的事件中抛出,但是反而会得到一个未处理的异常页面。

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

编辑:

只是为了更清楚一点——我知道当 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

【问题讨论】:

  • 您确定还有默认的 404 页面吗?如果您没有将一个定义为自定义错误页面,则 IIRC 的默认行为是向客户端返回 404。不过,我可能会离开 - 很长时间以来我对这些东西进行了任何配置。
  • 在 IIS 中也不会触发 404 页面。相反,它应该向客户端发送状态码为 404 的结果。我认为您在这里混淆了一些概念?
  • 我完全有可能混淆了一些概念。我知道当 Apache 返回 404 错误时,它还会返回一个带有状态代码的简单 HTML 页面。我可能假设 IIS 也这样做。

标签: c# asp.net


【解决方案1】:

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

这个页面确实存在——它是 IIS 在发送 404 时生成的简短、信息丰富的 HTML sn-p,因此最终用户不会只收到空白页面。

【讨论】:

    猜你喜欢
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 2017-03-26
    • 2018-10-20
    相关资源
    最近更新 更多