在ASP.NET MVC中提供favicon.ico

ASP.NET MVC中如何提供favicon.ico的最终/最佳build议是什么?

我目前正在做以下工作:

  • 添加一个条目到我的RegisterRoutes方法的一开始

    routes.IgnoreRoute("favicon.ico"); 
  • 将favicon.ico放在我的应用程序的根目录下(这也将是我的域的根)。

我有两个问题:

  • 没有办法把favicon.ico放在我的应用程序根目录以外的地方。 在ContentControllers的相同级别上,这真是太棒了。
  • 这是IgnoreRoute("favicon.ico")声明是否足够 – 或者我也应该按照Phil Haack的博客文章所述进行以下操作。 我没有意识到在任何根目录以外的任何目录中看到了对favicon.ico的请求 – 这会使得这是不必要的(但是知道如何去做)是很好的。

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

把favicon.ico放在你域名的根目录下只会影响到IE5,IIRC。 对于更现代的浏览器,您应该能够包含一个链接标记指向另一个目录:

 <link rel="SHORTCUT ICON" href="http://www.mydomain.com/content/favicon.ico"/> 

您也可以使用非IE浏览器的非ico文件,为此我可能会使用以下条件语句来提供PNG到FF等,以及ICO到IE:

 <link rel="icon" type="image/png" href="http://www.mydomain.com/content/favicon.png" /> <!--[if IE]> <link rel="shortcut icon" href="http://www.mydomain.com/content/favicon.ico" type="image/vnd.microsoft.icon" /> <![endif]--> 

我同意Chris的回答,但是看到这是一个特定的ASP.NET MVC问题,最好使用Razor语法:

 <link rel="icon" href="@Url.Content("~/content/favicon.ico")"/> 

或者传统上

 <link rel="icon" href="<%= Url.Content("~/content/favicon.ico") %>"/> 

而不是

 <link rel="icon" href="http://www.mydomain.com/content/favicon.ico"/> 

1)你可以把你的图标在你想要的位置,并将此标签添加到您的页面头

 <link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" /> 

尽pipe一些浏览器默认会尝试从/favicon.ico获取图标,所以你应该使用IgnoreRoute。

2)如果一个浏览器在另一个目录中发送一个favicon的请求,它会得到一个404错误,这很好,如果你的主页中的回答1有链接标签,浏览器将获得你想要的图标。

我认为, favicon.ico应该在根文件夹中。 它只属于那里。

如果你想服务不同的图标 – 把它放到控制器。 你可以做到这一点。 如果没有,只需将其保留在根文件夹中。

也应该可以创build一个控制器,返回ico文件并注册路由/favicon.ico指向该控制器。

使用此代替favicon.ico,它倾向于search最喜欢的图标文件

 > <link rel="ICON" > href="@System.IO.Path.Combine(Request.PhysicalApplicationPath, > "favicon.ico")" /> 

使用所需的path,并结合fav图标文件,以便它获得其search的准确地址

使用这个解决了在Application_Error上始终引发的Fav.icon错误