ASP.NET MVC:如何在返回状态码404的同时提供内容?

19

可能重复:
如何配置IIS以使用自定义内容提供我的404响应?

我想在我的ASP.NET MVC应用程序中提供一个用户友好的“未找到”页面,并提供404状态代码。(基于此答案

我已经有了捕获无效路由的机制,而且我的ErrorController/Handle404操作会提供自定义的404页面。

我当前的Handle404实现:

    public ActionResult Handle404()
    {
        Response.StatusCode = 404;
        return View("NotFound");
    }

目前,IIS 提供的页面是 404 - 找不到文件或目录。您要查找的资源可能已被删除,更改了名称或暂时不可用。(标准的 IIS 页面,而不是我的用户友好内容)

我该如何在仍然提供内容的情况下,在 Handle404 操作返回的结果中包含 404 状态码?

2个回答

17

设置

 Response.TrySkipIisCustomErrors = true; 

解决了问题。


0

您已经在做正确的事情。您可以查看 Fiddler 来确认这一点。

然而,并不能保证浏览器会遵守您的内容。维基百科注明

Internet Explorer(Internet Explorer 7 之前的版本)不会显示自定义页面,除非它们大于 512 字节,否则会选择显示“友好”的错误页面。Google Chrome 包括类似的功能,如果页面大小小于 512 字节,则将 404 替换为由 Google 算法生成的替代建议。

可能需要进行一些试验和调整,以便创建一个各种浏览器都能够显示的页面。


1
请注意,我所看到的页面来自IIS,而不是我的Web浏览器。 - Marek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接