我遇到了一个错误:
“路径 '/favicon.ico' 的控制器未找到或未实现 IController 接口”
然后我想:框架如何知道哪些文件需要实例化控制器,因为脚本、CSS和其他文件也是一样的吗?
(以前从来没有想过,但现在收藏夹在抱怨,我在想...)
但回到错误,为什么会发生这种情况?
我遇到了一个错误:
“路径 '/favicon.ico' 的控制器未找到或未实现 IController 接口”
然后我想:框架如何知道哪些文件需要实例化控制器,因为脚本、CSS和其他文件也是一样的吗?
(以前从来没有想过,但现在收藏夹在抱怨,我在想...)
但回到错误,为什么会发生这种情况?
将以下代码添加到您的global.asax文件中:
routes.IgnoreRoute("favicon.ico");
你也可以通过约束条件来指定忽略的路由
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
routes.IgnoreRoute("favicon.ico");
已经足够的情况下,使用复杂的方法是否有合理性?也许某些浏览器会尝试自动获取网站图标,并使用一些奇怪的 URL? - ANeves顶部答案是正确的。
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
但对于较新版本的MVC,您必须将此添加到 RouteConfig.cs 中的 RegisterRoutes 方法的顶部(因此在调用routes.MapRoute(..)之前的某个位置)。
你可能是在使用VS web服务器时遇到这个问题,对吗?
如果使用IIS,就不会出现这个问题,因为IIS(默认情况下)处理图片文件的请求(.ico,.jpg,.gif等),所以它们不会传递到你的应用程序中。
听起来很有趣,但只有在我勾选了“启用仅限我的代码”选项(在工具->选项->调试
下)时,才会出现此错误。一旦取消勾选,我就不再遇到这个错误。
请注意,似乎错误仍然在后台抛出,但立即在内部被捕获,因此最好的解决方案是在global.asax中编写代码以忽略它,正如其他答案所建议的那样。