Serving favicon.ico in ASP.NET MVC

What is the final/best recommendation for how to serve favicon.ico in ASP.NET MVC?

I am currently doing the following:

  • Adding an entry to the very beginning of my RegisterRoutes method:
    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 {<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="690f081f000a06075429">[email protected]</a>"(.*/)?favicon.ico(/.*)?"});

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

I agree with the answer from Chris, but seeing this is a specific ASP.NET MVC question it would be better to use either Razor syntax:

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

Or traditionally
<link rel="icon" href="<%= Url.Content(" rel="nofollow noreferrer noopener"~/content/favicon.ico") %>"/>

rather than
<link rel="icon" href="http://www.mydomain.com/content/favicon.ico" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener"/>

Method 2

Placing favicon.ico in the root of your domain only really affects IE5, IIRC. For more modern browsers you should be able to include a link tag to point to another directory:

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

You can also use non-ico files for browsers other than IE, for which I’d maybe use the following conditional statement to serve a PNG to FF,etc, and an ICO to IE:
<link rel="icon" type="image/png" href="http://www.mydomain.com/content/favicon.png" rel="nofollow noreferrer noopener" />
<!--[if IE]>
<link rel="shortcut icon" href="http://www.mydomain.com/content/favicon.ico" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener" type="image/vnd.microsoft.icon" />
<![endif]-->

Method 3

1) You can put your favicon where you want and add this tag to your page head

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

although some browsers will try to get the favicon from /favicon.ico by default, so you should use the IgnoreRoute.

2) If a browser makes a request for the favicon in another directory it will get a 404 error wich is fine and if you have the link tag in answer 1 in your master page the browser will get the favicon you want.

Method 4

I think that favicon.ico should be in root folder. It just belongs there.

If you want to servere diferent icons – put it into controler.
You can do that. If not – just leave it in the root folder.

Method 5

None of the above worked for me. I finally solved this problem by renaming favicon.ico to myicon.ico, and reference it in the head <link rel="icon" href="~/myicon.ico" rel="nofollow noreferrer noopener" type="image/x-icon" />

Method 6

It should also be possible to create a controller that returns the ico file and register the route /favicon.ico to point to that controller.

Method 7

All you need to do is to add app.UseStaticFiles(); in your startup.cs -> public void Configure(IApplicationBuilder app, IHostingEnvironment env).

ASP.net core provides an excellent way to get static files. That is using the wwwroot folder. Please read Static files in ASP.NET Core.

Using the <Link /> is not a very good idea. Why would someone add the link tag on each HTML or cshtml for the favicon.ico?

Method 8

Use this instead of just the favicon.ico which tends to search in for the fav icon file

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

Use the requested path and combine with the fav icon file so that it gets the accurate address which its search for

Using this solved the Fav.icon error which is raised always on Application_Error

Method 9

Found that in .Net Core, placing the favicon.ico in /lib rather than wwwroot fixes the issue


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x