【问题标题】:mvc: does the favicon.ico also look for a controller?mvc:favicon.ico 是否也在寻找控制器?
【发布时间】:2011-06-05 04:22:57
【问题描述】:

我收到一个错误:

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

然后我想:框架如何知道它必须为哪些文件实例化一个控制器,因为对于脚本、css和其他文件也是如此?

(从来没想过,但现在网站图标在抱怨,我想知道....)

但回到错误,为什么会出现这种情况?

【问题讨论】:

标签: asp.net asp.net-mvc asp.net-mvc-2


【解决方案1】:

最佳答案是正确的。

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

但是对于较新版本的 MVC,您必须在 RouteConfig.cs 中的 RegisterRoutes 方法的顶部添加它(所以在 routes.MapRoute(..) 之前的某处是调用)。

【讨论】:

    【解决方案2】:

    听起来很有趣,我只有在选中 tools->options->debugging 下的“仅启用我的代码”选项时才会收到此错误,并且一旦我取消选中它,我就不再收到此错误。

    但请注意,错误似乎仍在幕后引发,但在内部立即被捕获,因此最好的解决方案是在 global.asax 中编写代码以按照其他答案的建议忽略它。

    【讨论】:

      【解决方案3】:

      你也可以指定带有约束的忽略路由

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

      【讨论】:

      • 当简单的routes.IgnoreRoute("favicon.ico"); 似乎就足够了时,使用复杂方法有什么理由吗?也许某些浏览器会尝试自动获取网站图标,并使用有趣的 URL?
      • 只有当 favicon.ico 像 @mateuscb 在他的评论中指出的那样被放置在站点的根目录中时,这种简单的方法才有效,但是如果按照 stackoverflow.com/questions/487230/… 中的描述将它放在其他地方,那么我们需要这种更复杂的方法。
      • 任何使用此代码 sn-p 的人都应该知道存在语法错误,因为“路由”应该是小写的,因为我们处理的是实例而不是类型
      • @yohal - 哎呀 - 按照haacked.com/archive/2008/07/14/…修复它
      【解决方案4】:

      将此添加给您global.asax

      routes.IgnoreRoute("favicon.ico");
      

      【讨论】:

      • 谢谢,效果很好。我正在使用 ELMAH,它一直给我一个错误。为确保在 ELMAH 中没有出现关于 favicon.ico 的错误,请务必在您网站的根文件夹中添加文件“favicon.ico”。
      【解决方案5】:

      您可能是通过 VS Web 服务器获得的。对吧?

      由于 IIS(默认情况下)处理图像请求(.ico、.jpg、.gif 等),因此您不会通过 IIS 获得此功能,因此它们不会进入您的应用程序。

      【讨论】:

      • 我的第一反应是肯定的,但不是,它也在iis6 + win2003上
      • 也在 IIS 7 上。您必须为 favicon 和 robots.txt 添加 ignoreroute。
      • IIS 7 有这个"integrated pipeline" 的东西,HTTP 处理程序几乎可以破解任何访问该站点的 URL,IIRC。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2014-05-12
      • 2015-10-24
      • 2012-12-25
      相关资源
      最近更新 更多