asp.net - net - get favicon
Sirviendo favicon.ico en ASP.NET MVC (7)
1) Puedes poner tu favicon donde quieras y agregar esta etiqueta al encabezado de tu página
<link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" />
aunque algunos navegadores intentarán obtener el favicon de /favicon.ico de forma predeterminada, por lo que debe usar IgnoreRoute.
2) Si un navegador solicita un favicon en otro directorio, recibirá un error 404 que está bien y si tiene la etiqueta de enlace en la respuesta 1 en su página maestra, el navegador obtendrá el favicon que desea.
¿Cuál es la recomendación final / mejor sobre cómo servir favicon.ico en ASP.NET MVC?
Actualmente estoy haciendo lo siguiente:
Agregando una entrada al principio de mi método RegisterRoutes:
routes.IgnoreRoute("favicon.ico");
Colocar favicon.ico en la raíz de mi aplicación (que también va a ser la raíz de mi dominio).
Tengo dos preguntas:
- ¿No hay manera de poner el favicon.ico en otro lugar que no sea la raíz de mi aplicación? Es bastante difícil estar justo al mismo nivel que el
Content
y losControllers
. ¿Es esta
IgnoreRoute("favicon.ico")
suficiente, o debería hacer lo siguiente como se explica en una publicación de blog de Phil Haack ? No tengo conocimiento de haber visto nunca una solicitud de favicon.ico en ningún directorio que no sea la raíz, lo que haría esto innecesario (pero es bueno saber cómo hacerlo).routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
Colocar favicon.ico en la raíz de su dominio solo afecta realmente a IE5, IIRC. Para navegadores más modernos, debería poder incluir una etiqueta de enlace para apuntar a otro directorio:
<link rel="SHORTCUT ICON" href="http://www.mydomain.com/content/favicon.ico"/>
También puede usar archivos que no sean ico para otros navegadores que no sean IE, para los cuales quizás utilice la siguiente declaración condicional para servir un PNG a FF, etc. y un ICO a 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]-->
Creo que favicon.ico debería estar en la carpeta raíz. Simplemente pertenece allí.
Si quieres servir diferentes iconos, ponlo en controler. Usted puede hacer eso. Si no, simplemente déjalo en la carpeta raíz.
Estoy de acuerdo con la respuesta de Chris, pero como se trata de una pregunta específica de ASP.NET MVC, sería mejor usar la sintaxis de Razor:
<link rel="icon" href="@Url.Content("~/content/favicon.ico")"/>
O tradicionalmente
<link rel="icon" href="<%= Url.Content("~/content/favicon.ico") %>"/>
más bien que
<link rel="icon" href="http://www.mydomain.com/content/favicon.ico"/>
Nada de lo anterior funcionó para mí. Finalmente resolví este problema cambiando el nombre de favicon.ico a myicon.ico, y lo menciono en la cabecera <link rel="icon" href="~/myicon.ico" type="image/x-icon" />
También debería ser posible crear un controlador que devuelva el archivo ico y registrar la ruta /favicon.ico para que apunte a ese controlador.
Use esto en lugar de solo favicon.ico que tiende a buscar el archivo de icono de fav.
> <link rel="ICON"
> href="@System.IO.Path.Combine(Request.PhysicalApplicationPath,
> "favicon.ico")" />
Utilice la ruta solicitada y combínela con el archivo de íconos fav para que obtenga la dirección precisa que busca
Usando esto resolvió el error Fav.icon que se genera siempre en Application_Error