Domanda

Qual è la migliore / migliore raccomandazione su come servire favicon.ico in ASP.NET MVC?

Attualmente sto facendo quanto segue:

  • Aggiunta di una voce al primissimo del mio metodo RegisterRoutes:

    routes.IgnoreRoute("favicon.ico");
    
  • Posizionando favicon.ico nella radice della mia applicazione (che sarà anche la radice del mio dominio).

Ho due domande:

  • Non c'è modo di mettere favicon.ico in un posto diverso dalla radice della mia applicazione. È piuttosto malvagio essere lì allo stesso livello di Content e Controllers.
  • Questa IgnoreRoute("favicon.ico") dichiarazione è sufficiente - o dovrei anche fare quanto segue come discusso in un post sul blog di Phil Haack . Non sono a conoscenza di aver mai visto una richiesta a favicon.ico in qualsiasi directory diversa dalla radice - il che renderebbe questo non necessario (ma è bene sapere come farlo).

    routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
    
È stato utile?

Soluzione

Il posizionamento di favicon.ico nella radice del tuo dominio ha effetto solo su IE5, IIRC. Per i browser più moderni dovresti essere in grado di includere un tag di collegamento per puntare a un'altra directory:

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

Puoi anche utilizzare file non ico per browser diversi da IE, per i quali potrei forse usare la seguente dichiarazione condizionale per servire un PNG in FF, ecc. e un ICO in 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]-->

Altri suggerimenti

Sono d'accordo con la risposta di Chris, ma visto che questa è una domanda ASP.NET MVC specifica, sarebbe meglio usare la sintassi di Razor:

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

O tradizionalmente

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

anziché

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

1) Puoi posizionare la tua favicon dove vuoi e aggiungere questo tag alla testa della pagina

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

sebbene alcuni browser proveranno a ottenere la favicon da /favicon.ico per impostazione predefinita, quindi dovresti usare IgnoreRoute.

2) Se un browser effettua una richiesta per la favicon in un'altra directory, si verificherà un errore 404 che va bene e se nella pagina principale è presente il tag di collegamento nella risposta 1, il browser otterrà la favicon desiderata.

Penso che favicon.ico dovrebbe essere nella cartella principale. Appartiene solo lì.

Se vuoi servire diverse icone, mettile in controler. Ce la puoi fare. In caso contrario, lascialo nella cartella principale.

Nessuna delle precedenti ha funzionato per me. Alla fine ho risolto questo problema rinominando favicon.ico in myicon.ico e facendolo riferimento in testa <link rel="icon" href="~/myicon.ico" type="image/x-icon" />

Dovrebbe anche essere possibile creare un controller che restituisca il file ico e registrare la route /favicon.ico per puntare a quel controller.

Usa questo invece del solo favicon.ico che tende a cercare il file icona fav

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

Usa il percorso richiesto e combinalo con il file icona fav in modo che ottenga l'indirizzo esatto che la sua ricerca

L'utilizzo di questo ha risolto l'errore Fav.icon che viene generato sempre su Application_Error

Tutto quello che devi fare è aggiungere app.UseStaticFiles(); in startup.cs - > public void Configure(IApplicationBuilder app, IHostingEnvironment env).

Il core ASP.net fornisce un modo eccellente per ottenere file statici. Quello sta usando la cartella wwwroot. Leggi File statici in ASP.NET nucleo.

L'uso di <Link /> non è un'ottima idea. Perché qualcuno dovrebbe aggiungere il tag di collegamento su ogni HTML o cshtml per favicon.ico?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top