web-dev-qa-db-fra.com

Servir favicon.ico dans ASP.NET MVC

Quelle est la recommandation finale/meilleure pour savoir comment servir favicon.ico dans ASP.NET MVC?

Je suis actuellement en train de faire ce qui suit:

  • Ajout d'une entrée au very begin de ma méthode RegisterRoutes:

    routes.IgnoreRoute("favicon.ico");
    
  • Placer favicon.ico à la racine de mon application (qui sera également la racine de mon domaine).

J'ai deux questions:

  • N'y a-t-il aucun moyen de placer le favicon.ico ailleurs qu'à la racine de mon application. C’est assez méchant d’être au même niveau que Content et Controllers.
  • Cette déclaration IgnoreRoute("favicon.ico") est-elle suffisante - ou devrais-je également procéder comme indiqué dans un article de blog de Phil Haack . Je ne suis pas au courant d'avoir déjà vu une demande de favicon.ico dans un répertoire autre que la racine - ce qui rendrait cela inutile (mais il est bon de savoir comment le faire).

    routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
    
245
Simon_Weaver

Placer favicon.ico à la racine de votre domaine n'affecte réellement que IE5, IIRC. Pour les navigateurs plus modernes, vous devriez pouvoir inclure une balise de lien pour pointer vers un autre répertoire:

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

Vous pouvez également utiliser des fichiers non-ico pour des navigateurs autres que IE, pour lesquels je pourrais peut-être utiliser l'instruction conditionnelle suivante pour servir un fichier PNG à FF, etc., et un 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]-->
193
Chris

Je suis d'accord avec la réponse de Chris, mais vu qu'il s'agit d'une question ASP.NET MVC spécifique, il serait préférable d'utiliser la syntaxe Razor:

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

Ou traditionnellement

<link rel="icon" href="<%= Url.Content("~/content/favicon.ico") %>"/>

plutôt que 

<link rel="icon" href="http://www.mydomain.com/content/favicon.ico"/>
216
AlexC

1) Vous pouvez mettre votre favicon où vous voulez et ajouter cette balise à la tête de votre page

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

bien que certains navigateurs essaient d’obtenir le favicon de /favicon.ico par défaut, vous devez donc utiliser IgnoreRoute.

2) Si un navigateur fait une demande pour le favicon dans un autre répertoire, il obtiendra une erreur 404, ce qui est correct et si vous avez la balise link dans la réponse 1 de votre page maître, le navigateur obtiendra le favicon souhaité.

18
Eduardo Campañó

Je pense quefavicon.icodevrait être dans le dossier racine. Il appartient juste là. 

Si vous voulez utiliser différentes icônes, mettez-la dans le contrôleur ..__ Vous pouvez le faire. Sinon, laissez-le simplement dans le dossier racine.

6
dmajkic

Aucun de ce qui précède n'a fonctionné pour moi. J'ai finalement résolu ce problème en renommant favicon.ico en myicon.ico et en le référençant dans la tête <link rel="icon" href="~/myicon.ico" type="image/x-icon" />

2
Tracy Zhou

Il devrait également être possible de créer un contrôleur qui renvoie le fichier ico et d’enregistrer la route /favicon.ico pour qu’il pointe vers ce contrôleur.

2
Carles Company

Utilisez ceci au lieu du fichier favicon.ico qui a tendance à rechercher le fichier d'icônes fav. 

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

Utilisez le chemin demandé et combinez-le avec le fichier d’icône fav afin qu’il obtienne l’adresse exacte recherchée. 

En utilisant ceci a résolu l'erreur Fav.icon qui est toujours générée sur Application_Error

0
Tribhuvan Patel

Tout ce que vous avez à faire est d’ajouter app.UseStaticFiles(); dans votre startup.cs -> public void Configure(IApplicationBuilder app, IHostingEnvironment env).

Le noyau ASP.net fournit un excellent moyen d’obtenir des fichiers statiques. Cela utilise le dossier wwwroot. Veuillez lire Fichiers statiques dans ASP.NET Core .

Utiliser le <Link /> n’est pas une très bonne idée. Pourquoi quelqu'un ajouterait-il la balise de lien sur chaque HTML ou cshtml pour le fichier favicon.ico? 

0
Ripal Barot