关于如何在 ASP.NET MVC 中服务 favicon.ico 的最终/最佳建议是什么?
我目前正在执行以下操作:
在我的 RegisterRoutes 方法的最开始添加一个条目: routes.IgnoreRoute("favicon.ico");
将 favicon.ico 放在我的应用程序的根目录中(这也将成为我的域的根目录)。
我有两个问题:
除了我的应用程序的根目录之外,没有办法将 favicon.ico 放在其他地方。与内容和控制器处于同一级别是非常讨厌的。
这个 IgnoreRoute("favicon.ico") 声明是否足够 - 或者我也应该按照 Phil Haack 的博客文章中的讨论执行以下操作。我不知道曾经在根目录以外的任何目录中看到过对 favicon.ico 的请求——这将使这变得不必要(但知道如何去做是件好事)。 routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*[/\\])?favicon\.((ico)|(png))(/.*)?" });
routes.MapRoute("IgnoreFavicon", "{*favicon}", new { favicon = @"(.*[/\\])?favicon\.((ico)|(png))(/.*)?" });
routes.MapRoute("Ingore", "{*favicon}", new { }, new { favicon = @"(.*[/\\])?favicon\.((ico)|(png))(/.*)?" });
注意new {}
,
我同意 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"/>
将 favicon.ico 放在域的根目录中只会影响 IE5、IIRC。对于更现代的浏览器,您应该能够包含一个链接标记以指向另一个目录:
<link rel="SHORTCUT ICON" href="http://www.mydomain.com/content/favicon.ico"/>
您还可以将非 ico 文件用于 IE 以外的浏览器,为此我可能会使用以下条件语句将 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]-->
1)您可以将您的网站图标放在您想要的位置并将此标签添加到您的页面标题
<link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" />
虽然有些浏览器默认会尝试从 /favicon.ico 获取 favicon,所以你应该使用 IgnoreRoute。
2)如果浏览器在另一个目录中请求网站图标,它将得到一个 404 错误,这很好,如果您的母版页中的答案 1 中有链接标签,浏览器将获得您想要的网站图标。
我认为 favicon.ico 应该在根文件夹中。它只属于那里。
如果您想使用不同的图标 - 将其放入控制器中。你可以这样做。如果没有 - 只需将其留在根文件夹中。
以上都不适合我。我终于通过将 favicon.ico 重命名为 myicon.ico 解决了这个问题,并在头部 <link rel="icon" href="~/myicon.ico" type="image/x-icon" />
中引用它
type
和实际文件是正确的 .ico 文件。
还应该可以创建一个返回 ico 文件的控制器并注册路由 /favicon.ico 以指向该控制器。
您需要做的就是在您的 startup.cs 中添加 app.UseStaticFiles();
-> public void Configure(IApplicationBuilder app, IHostingEnvironment env)
。
ASP.net 核心提供了一种获取静态文件的绝佳方式。那是使用 wwwroot 文件夹。请阅读Static files in ASP.NET Core。
使用 <Link />
不是一个好主意。为什么有人会在 favicon.ico 的每个 HTML 或 cshtml 上添加链接标签?
使用它而不是 favicon.ico,它倾向于搜索收藏图标文件
> <link rel="ICON"
> href="@System.IO.Path.Combine(Request.PhysicalApplicationPath,
> "favicon.ico")" />
使用请求的路径并与收藏图标文件结合,以便获得其搜索的准确地址
使用它解决了总是在 Application_Error 上引发的 Fav.icon 错误
发现在 .Net Core 中,将 favicon.ico 放在 /lib 而不是 wwwroot 可以解决问题