【问题标题】:MVC Custom errors not working in IIS8.5 (but working locally)MVC 自定义错误在 IIS8.5 中不起作用(但在本地起作用)
【发布时间】:2015-10-31 13:50:07
【问题描述】:

我无法在 IIS8.5 中显示任何自定义错误页面!

当我在 Visual Studio 中本地运行我的 MVC 5 应用程序时,会显示自定义错误页面。但是当我在我的网络服务器上部署到 IIS 并导航到带有“错误 URL”的站点子页面时,我的自定义 404 页面应该会显示出来,但会显示默认的通用 404 页面。

这是我所做的:

web.config

customError 部分已被删除。

添加了以下部分

<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
      <remove statusCode="404" />
      <remove statusCode="500" />
      <error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound" />      
      <error statusCode="500" responseMode="ExecuteURL" path="/Error/ServerError" />      
    </httpErrors>
  </system.webServer>

控制器

namespace MyApp.Controllers
{
  [Authorize(Roles = "MyRole")]
  public class ErrorController : Controller
  {
    [AllowAnonymous]
    public ActionResult NotFound()
    {
        Response.StatusCode = 404;

        return View();
    }

    [AllowAnonymous]
    public ActionResult ServerError()
    {
        Response.StatusCode = 500;

        return View();
    }
  }
}

观看次数

非常简单直接(此处不包括)。

IIS

已验证 IIS 错误页面功能与我的配置中的相同。每个错误状态代码的页面。功能和页面设置为“自定义”。

已安装检查的 Windows 功能\Web 服务器 (IIS)\Web 服务器\常见 HTTP 功能\HTTP 错误。

开发者工具

导航到拼写错误的子页面显示我收到 404 客户端错误。

帮助

我尝试了很多东西!我错过了什么吗? IIS 环境问题,即某处的设置?

自定义错误在我的 IDE 中有效,但在 IIS 中无效。我已经花了一天多的时间!阅读关于 SO 的许多页面、文章和类似问题。

【问题讨论】:

  • 问题标题声明“在本地工作”,我的意思是它在 Visual Studio IDE 中工作,而不是在同一个 IIS 框上浏览。很抱歉有任何混淆。
  • 当您手动导航到某个错误操作(例如 /Error/NotFound)时会看到什么?
  • @TiesonT。对于 Edge,我收到“HTTP 404 错误,这很奇怪...... Microsoft Edge 找不到此页面”消息。对于 FF 和 Chrome,我只会得到空白页。 (不知道为什么 FF 和 Chrome 不显示他们的通用浏览器 404 错误页面。)
  • 如果在NotFound的action方法中设置断点,是否到达?
  • @TiesonT.Yep 进入 NotFound() 操作方法,Response.StatusCode 为 200,我将其设置为 404,这一切都在 VS IDE 中完美运行,即正在显示自定义错误页面.但在 IIS 中并非如此,这就是为什么我倾向于网络服务器上的环境问题。

标签: asp.net-mvc iis


【解决方案1】:

经过几天的调查,终于找到了问题所在。

在 IIS 中,我的网站作为应用程序驻留在默认网站下,例如默认网站\MyDevSite。 (我所有的开发站点都在默认网站下)。

当我将网站移动到它自己的 IIS 站点时,现在会显示自定义错误页面!

如果有人知道 IIS 中的应用程序阻止显示自定义错误页面的原因,请在此处添加评论。最好理解为什么会发生这种情况。

我希望这可以帮助某人。让我走了很长一段时间。

【讨论】:

    【解决方案2】:

    您是如何浏览 IIS 的?如果您在同一台机器上执行此操作,则不会看到自定义错误页面,因为如果未指定,customErrors 部分将默认使用 RemoteOnly

    【讨论】:

    • 我正在远程浏览 IIS,即从我的桌面 --> 互联网 --> IIS(站点)。我尝试在本地查看会发生什么 - 与远程浏览的结果相同。
    • @ThomasVeil 只要它们是不同的机器,那很好。如果您有效地浏览本地主机,那么您将获得您描述的行为。也就是说,尝试将&lt;customErrors mode="RemoteOnly"&gt;&lt;/customErrors&gt; 添加到您的IIS web.config。如果这仍然不起作用,请尝试将其设置为 mode="On"。如果这不起作用,那么它可能是其他地方的问题。
    • 谢谢约翰,我尝试了 同时使用 RemoteOnly 和 On,同样的事情,仍然无法正常工作。但这是个好主意。
    【解决方案3】:

    问题出在 web.config(path="/Error/NotFound") 中的路径。当您在默认网站下移动您的网站时,NotFound 页面的 url 路径将被更改。所以,在 path 中给出正确的页面 url 然后它会起作用(这对我有用)。

    【讨论】:

      猜你喜欢
      • 2011-12-14
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 2021-12-21
      • 2015-11-16
      • 2012-12-01
      • 2011-05-22
      相关资源
      最近更新 更多