啊哈!
尝试这个:
Response.TrySkipIisCustomErrors = true;
Response.Status = "404 Not Found";
Response.StatusCode = 404;
我发现Response.TrySkipIisCustomErrors=true在设置状态码之前添加后,我会看到正常的页面副本并返回 404。如果没有此行,将显示标准 IIS 404 页面。
或者,这可以在 web.config 中设置,如下所示:
<system.webServer>
<httpErrors existingResponse="PassThrough">
// custom error page mappings
</httpErrors>
</system.webServer>
这里的关键是existingResponse="PassThrough"
这已添加到 IIS7,因此在以集成管道模式运行的站点上是必需的。
欲了解更多信息:http: //msdn.microsoft.com/en-us/library/system.web.httpresponse.tryskipiiscustomerrors.aspx
更新
更新以澄清/更多信息,因为人们仍然觉得这很有用。值得注意的是,如果您需要一个简单的通用 404 页面,请使用 web.config 方法(最好将其设为纯 HTML 页面)。
如果您有一个高度动态或 CMS 驱动的网站,其中任何给定页面都可能返回 404 但您想显示与访问者相关的信息,我描述的方法效果最好。
例如,特价商品页面 (offers/some-offer) 可以查找商品 (some-offer),如果它不存在,则在引擎盖下返回 404 时显示替代或相关商品。据访问者所知,他们刚刚被告知该优惠不再可用,但他们仍在优惠部分,但我们还告诉机器人取消对 URL 的索引。如果只有一个通用 404 页面,这将更难做到。