在ASP.NET MVC中提供favicon.ico
ASP.NET MVC中如何提供favicon.ico的最终/最佳build议是什么?
我目前正在做以下工作:
-
添加一个条目到我的RegisterRoutes方法的一开始 :
routes.IgnoreRoute("favicon.ico");
-
将favicon.ico放在我的应用程序的根目录下(这也将是我的域的根)。
我有两个问题:
- 没有办法把favicon.ico放在我的应用程序根目录以外的地方。 在
Content
和Controllers
的相同级别上,这真是太棒了。 -
这是
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错误