'The controller for path '/favicon.ico'未找到...'错误

'The controller for path '/favicon.ico' was not found...' error

我们正在 Visual Studio 2015 年构建一个 ASP.NET MVC 4 应用程序。该应用程序使用 Elmah.MVC 进行异常处理。我们是三个开发人员;对于我们两个人来说,它在本地主机上运行良好,但一位开发人员遇到此错误(由 Elmah 捕获):

The controller for path '/favicon.ico' was not found or does not implement IController.

This post 提供了一个解决方案,我已经修改了包含它的路由,并且有问题的开发人员已经同步了他的代码:

routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

现在 Elmah 中没有显示任何内容,但用户继续看到一般错误:

500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.

这是怎么回事?谢谢。

更新 1: 从 Web.config 中删除了 Elmah 内容,并让开发人员加载了该应用程序。它会进入一个无限循环,试图对用户进行身份验证,类似于 this

我们正在使用 OWIN-MixedAuth,问题很可能与 IIS Express 设置有关。我明天会让开发人员尝试并确认:

  1. 突出显示 Visual Studio
  2. 中的项目
  3. 打开右侧的'Properties'面板(或按F4)
  4. 将'Windows Authentication'设置为'Enabled'
  5. 将'Anonymous Authentication'设置为'Enabled'

顾名思义,它是混合身份验证,因此必须启用两种类型的身份验证。

更新 2: OWIN-Mixed Auth 问题已修复。现在,它与Elmah使用的Web.config中的这三个HTTP模块有关:

<httpModules>
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
  <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
  <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>

当我们将它们注释掉时,一个开发人员就可以访问该站点。这些模块有什么作用?为什么他们会引起问题?

将此添加到您的 global.asax 文件。

routes.IgnoreRoute("favicon.ico");

问题终于解决了。我们必须进行两项更改:

  • 我们正在使用 OWIN-MixedAuth,部分问题出在 IIS Express 设置上(在 "Development Server" 部分下):

    1. 突出显示 Visual Studio
    2. 中的项目
    3. 打开右侧的'Properties'面板(或按F4)
    4. 将'Windows Authentication'设置为'Enabled'
    5. 将'Anonymous Authentication'设置为'Enabled'
  • 问题的另一部分:IIS Express 使用的损坏的 applicationhost.config 文件:

    1. 确保您在 Windows 资源管理器中显示隐藏文件。
    2. 通过 Windows 资源管理器转到项目的根目录。
    3. 打开隐藏的 .vs 文件夹。
    4. 转到配置 > applicationhost.config,备份,然后在记事本中打开(Notepad++ 更好)。
    5. 将它与我们一台机器上的工作 applicationhost.config 文件进行比较。我们发现配置文件中列出的许多旧站点不再使用。
    6. 清理完毕后,启动该应用程序,它开始运行了。