在ASP中服务favicon.ico。NET MVC

关于如何在ASP中提供favicon.ico,最终/最好的建议是什么?净MVC吗?

我目前正在做以下事情:

  • 在我的RegisterRoutes方法的一开始中添加一个条目:

    routes.IgnoreRoute("favicon.ico");
    
  • Placing favicon.ico in the root of my application (which is also going to be the root of my domain).

I have two questions:

  • Is there no way to put the favicon.ico somewhere other than the root of my application. It's pretty icky being right there at the same level as Content and Controllers.
  • Is this IgnoreRoute("favicon.ico") statement sufficient - or should I also do the following as discussed in a blog post from Phil Haack. I'm not aware of ever having seen a request to favicon.ico in any directory other than the root - which would make this unnecessary (but it's good to know how to do it).

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

1)你可以把你的图标放在你想要的地方,并把这个标签添加到你的页头

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

尽管有些浏览器会默认从/favicon.ico中获取favicon,所以你应该使用IgnoreRoute。

2)如果浏览器在另一个目录下请求favicon,它会得到一个404错误,如果你在主页的答案1中有链接标签,浏览器会得到你想要的favicon。

我认为< em > ico < / em >位于应该在根文件夹。它就属于那里。

如果你想要服务器不同的图标-把它放在控制器。 你可以这样做。如果不是-就把它留在根文件夹

将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]-->

还应该可以创建一个返回ico文件的控制器,并注册route /favicon.ico以指向该控制器。

我同意克里斯的回答,但这是一个特定的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,后者倾向于搜索fav图标文件

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

使用所请求的路径并与fav图标文件结合,以便它获得其搜索的准确地址

使用这个解决了Fav。图标错误,该错误总是在Application_Error上引发

以上这些方法对我都没用。我最终通过将favicon.ico重命名为myicon.ico来解决这个问题,并在<link rel="icon" href="~/myicon.ico" type="image/x-icon" />头中引用它

你所需要做的就是在startup.cs -> public void Configure(IApplicationBuilder app, IHostingEnvironment env)中添加app.UseStaticFiles();

ASP.net核心提供了获取静态文件的绝佳方式。这就是使用wwwroot文件夹。请阅读静态文件在ASP。网络核心

使用<Link />并不是一个很好的主意。为什么有人会在favicon.ico的每个HTML或cshtml上添加链接标签?

发现在.Net Core中,将favicon.ico放在/lib中而不是wwwroot中可以修复这个问题