ASP.NET MVC:如何在返回状态码 404 时提供内容? [复制]

Posted

技术标签:

【中文标题】ASP.NET MVC:如何在返回状态码 404 时提供内容? [复制]【英文标题】:ASP.NET MVC: How to serve content while returning status code 404? [duplicate] 【发布时间】:2011-02-02 14:31:16 【问题描述】:

可能重复:How to configure IIS to serve my 404 response with my custom content?

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

我已经掌握了如何捕获无效路由的机制,并且自定义 404 页面由我的 ErrorController/Handle404 操作提供。

我目前对Handle404的实现:

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

目前,IIS 将页面作为404 - File or directory not found. The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable. 提供服务(标准 IIS 页面,不是我的用户友好内容)

如何在Handle404 操作提供的结果中包含 404 状态代码,同时仍然提供内容?

【问题讨论】:

【参考方案1】:

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

但是,不能保证浏览器会尊重您的内容。 Wikipedia notes:

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

可能需要对您的视图进行一些试验、错误和按摩,以便提供一个可供各种浏览器实际选择显示的页面。

【讨论】:

请注意,我看到的页面来自 IIS,而不是我的网络浏览器【参考方案2】:

设置

 Response.TrySkipIisCustomErrors = true; 

成功了。

【讨论】:

以上是关于ASP.NET MVC:如何在返回状态码 404 时提供内容? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用 asp.net MVC 以编程方式重定向到 404 页面

ASP.NET MVC API 操作返回 404,所有其他操作都有效

如何在 ASP.NET MVC 中以 JSON 格式返回 500 错误?

ASP.Net MVC 4. 在单独的程序集中路由控制器返回错误 404

ASP.NET MVC - Elmah 不工作并为 elmah.axd 返回 404 页面

如何在 ASP.NET MVC 中使用路由修复 404?