Pregunta

¿Cuál es la mejor/final recomendación sobre cómo servir favicon.ico en ASP.NET MVC?

Actualmente estoy haciendo lo siguiente:

  • Agregar una entrada al desde el comienzo de mi método RegisterRoutes:

    routes.IgnoreRoute("favicon.ico");
    
  • Colocar favicon.ico en la raíz de mi aplicación (que también será la raíz de mi dominio).

Tengo dos preguntas:

  • ¿No hay forma de colocar favicon.ico en otro lugar que no sea la raíz de mi aplicación?Es bastante repugnante estar ahí al mismo nivel que Content y Controllers.
  • Es esto IgnoreRoute("favicon.ico") declaración suficiente, o debería hacer también lo siguiente como se analiza en una publicación de blog de Phil Haack.No tengo conocimiento de haber visto nunca una solicitud a favicon.ico en ningún directorio que no sea el raíz, lo que lo haría innecesario (pero es bueno saber cómo hacerlo).

    routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
    
¿Fue útil?

Solución

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 navegadores que no sean IE, para lo cual quizás use 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]-->

Otros consejos

Estoy de acuerdo con la respuesta de Chris, pero al ver que esta es una pregunta específica de ASP.NET MVC, sería mejor usar la sintaxis Razor:

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

O tradicionalmente

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

en lugar de

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

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 el favicon en otro directorio, obtendrá 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.

Creo que favicon.ico debería estar en la carpeta raíz. Simplemente pertenece allí.

Si desea servir diferentes iconos, póngalo en control. Usted puede hacer eso. Si no, simplemente déjelo en la carpeta raíz.

Ninguno de los anteriores funcionó para mí. Finalmente resolví este problema cambiando el nombre de favicon.ico a myicon.ico, y lo mencioné 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 apuntar a ese controlador.

Use esto en lugar de solo el favicon.ico que tiende a buscar el archivo de icono fav

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

Use la ruta solicitada y combínela con el archivo de icono de favoritos para que obtenga la dirección precisa que busca

El uso de esto resolvió el error Fav.icon que se genera siempre en Application_Error

Todo lo que necesita hacer es agregar app.UseStaticFiles(); en su startup.cs - > public void Configure(IApplicationBuilder app, IHostingEnvironment env).

El núcleo ASP.net proporciona una excelente manera de obtener archivos estáticos. Eso está usando la carpeta wwwroot. Lea Archivos estáticos en ASP.NET Core .

Usar <Link /> no es una muy buena idea. ¿Por qué alguien agregaría la etiqueta de enlace en cada HTML o cshtml para favicon.ico?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top