Serving favicon.ico in ASP.NET MVC
如何在ASP.NET MVC中为favicon.ico提供服务的最终/最佳建议是什么?
我目前正在做以下工作:
在registerRoutes方法的开头添加一个条目:
1routes.IgnoreRoute("favicon.ico");将favicon.ico放在应用程序的根目录中(这也是我的域的根目录)。
我有两个问题:
- 除了我的应用程序的根目录,是否没有办法将favicon.ico放在其他地方?就在同一个水平上,与
Content 和Controllers 相当令人讨厌。 这是
IgnoreRoute("favicon.ico") 的声明足够吗?还是我应该按照PhilHaack在博客中讨论的那样做。我不知道在根目录之外的任何目录中都曾看到过对favicon.ico的请求——这会使这变得不必要(但知道如何做是件好事)。1routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
我同意Chris的回答,但鉴于这是一个特定的ASP.NET MVC问题,最好使用Razor语法:
1 | <link rel="icon" href="@Url.Content("~/content/favicon.ico")"/> |
或者传统上
1 | <link rel="icon" href="<%= Url.Content("~/content/favicon.ico") %>"/> |
而不是
1 | <link rel="icon" href="http://www.mydomain.com/content/favicon.ico"/> |
把favicon.ico放在域的根目录中只会影响IE5、IIRC。对于更现代的浏览器,您应该能够包含指向另一个目录的链接标记:
1 | <link rel="SHORTCUT ICON" href="http://www.mydomain.com/content/favicon.ico"/> |
您也可以对IE以外的浏览器使用非ICO文件,为此,我可以使用以下条件语句为PNG到FF等和ICO到IE提供服务:
1 2 3 4 | <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]--> |
1)你可以把你的锁骨放在你想要的地方,然后把这个标签贴在你的页首上。
1 | <link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" /> |
虽然有些浏览器默认情况下会尝试从/favicon.ico获取favicon,所以您应该使用ignoreoute。
2)如果一个浏览器在另一个目录中请求favicon,它将得到404错误wich is fine,如果您在主页面的答案1中有链接标签,浏览器将得到您想要的favicon。
我认为favicon.ico应该在根文件夹中。它只属于那里。
如果你想提供不同的图标-把它放入控制器。你可以做到。如果不是-把它留在根文件夹。
以上都不适合我。我最终解决了这个问题,将favicon.ico重命名为myicon.ico,并在头部
还应该可以创建一个控制器,该控制器返回ICO文件并注册route/favicon.ico以指向该控制器。
您只需在startup.cs->
ASP.NET核心提供了获取静态文件的极好方法。正在使用wwwroot文件夹。请读取ASP.NET核心中的静态文件。
使用
使用这个而不是fav icon.ico,它倾向于搜索fav图标文件
1 2 3 | > <link rel="ICON" > href="@System.IO.Path.Combine(Request.PhysicalApplicationPath, >"favicon.ico")" /> |
使用请求的路径并与FAV图标文件组合,以便获得其搜索的准确地址。
使用它解决了fav.icon错误,该错误在应用程序中总是出现