“/favicon.ico”路径的控制器未找到错误…

9
我们正在使用Visual Studio 2015构建一个ASP.NET MVC 4应用程序。该应用程序使用Elmah.MVC处理异常。我们有三个开发人员; 对于我们中的两个人,在本地主机上运行得很好,但是其中一个开发人员遇到了以下错误(由Elmah捕获):

路径“/favicon.ico”的控制器未找到或未实现IController。

此帖子提供了解决方案,我已经修改了路由以包含它,并且涉及的开发人员已同步他的代码:
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. 打开右侧的“属性”面板(或按F4)
  3. 将“Windows身份验证”设置为“启用”
  4. 将“匿名身份验证”设置为“启用”

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

更新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>

当我们将它们注释掉时,一个开发人员就能进入网站。这些模块是做什么的?为什么会引起问题?

2
为什么不为您的网站添加一个favicon.ico呢? - Darryl Braaten
1
这是有趣的事情,@DarrylBraaten -- 我们有一个 favicon.ico!请参见我上面的更新。 - Alex
1
确保遇到问题的开发人员在其解决方案中实际包含了 favicon.ico 文件。如果该文件仅存在但未被包含,则 VS 在调试期间不会将其复制到临时站点。 - Tommy
顺便提一下:访问/favicon.ico是一些浏览器遵循的惯例,因此即使您在其他地方有一个网站图标并在页面中声明了它,您仍然会在日志中找到这种条目。/apple-touch-icon.png也是如此。 - philippe_b
2个回答

3

最终解决了问题。我们需要做出两个更改:

  • 我们使用OWIN-MixedAuth,问题的一部分出在IIS Express设置上(在“Development Server”部分):

    1. 在Visual Studio中选择项目。
    2. 在右侧打开“属性”面板(或按F4键)。
    3. 将“Windows身份验证”设置为“已启用”。
    4. 将“匿名身份验证”设置为“已启用”。
  • 另一个问题是:IIS Express使用的应用程序host.config文件损坏:

    1. 确保在Windows Explorer中显示隐藏的文件。
    2. 通过Windows Explorer进入项目根目录。
    3. 打开隐藏的 .vs 文件夹。
    4. 进入config > applicationhost.config,备份并用记事本(最好用Notepad++)打开。
    5. 将其与我们机器中的一个可用的applicationhost.config文件进行比较。我们发现许多旧站点被列在配置文件中,但不再使用。
    6. 清理后,启动应用程序即可。

1
将以下内容添加到您的 global.asax 文件中。
routes.IgnoreRoute("favicon.ico");

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