Обслуживание favicon.ico в ASP.NET MVC

Какова конечная/лучшая рекомендация по использованию favicon.ico в ASP.NET MVC?

В настоящее время я делаю следующее:

  • Добавление записи к самому началу моего метода RegisterRoutes:

    routes.IgnoreRoute("favicon.ico");
    
  • Размещение favicon.ico в корне моего приложения (которое также будет корнем моего домена).

У меня есть два вопроса:

  • Невозможно ли поместить favicon.ico где-то, кроме корня моего приложения. Это довольно нехорошо, прямо на том же уровне, что и Content и Controllers.
  • Является ли это утверждение IgnoreRoute("favicon.ico") достаточным - или я должен также сделать следующее, как описано в блоге от Фила Хака. Я не знаю, когда-либо видел запрос к favicon.ico в любом каталоге, кроме корня, - что сделало бы это ненужным (но хорошо знать, как это сделать).

    routes.IgnoreRoute("{*favicon}", new {[email protected]"(.*/)?favicon.ico(/.*)?"});
    

Ответ 1

Размещение favicon.ico в корне вашего домена действительно влияет только на IE5, IIRC. Для более современных браузеров вы можете включить тег ссылки, чтобы указать на другой каталог:

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

Вы также можете использовать файлы non-ico для браузеров, отличных от IE, для которых я мог бы использовать следующий условный оператор для подачи PNG на FF и т.д. и 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]-->

Ответ 2

Я согласен с ответом Криса, но, видя, что это конкретный вопрос ASP.NET MVC, было бы лучше использовать синтаксис Razor:

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

Или традиционно

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

а не

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

Ответ 3

1) Вы можете поместить свой значок там, где хотите, и добавить этот тег в свою страницу

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

хотя некоторые браузеры будут пытаться получить favicon из /favicon.ico по умолчанию, поэтому вы должны использовать IgnoreRoute.

2) Если браузер делает запрос на значок в другом каталоге, он получит ошибку 404, которая будет прекрасной, и если у вас есть тег ссылки в ответе 1 на главной странице, браузер получит значок, который вы хотите.

Ответ 4

Я думаю, что favicon.ico должен находиться в корневой папке. Он просто принадлежит.

Если вы хотите использовать разные значки - поместите его в контроллер. Вы можете сделать это. Если нет - просто оставьте это в корневой папке.

Ответ 5

Также должно быть возможно создать контроллер, который возвращает файл ico и зарегистрировать маршрут /favicon.ico, чтобы указать на этот контроллер.

Ответ 6

Используйте это, а не только favicon.ico, который стремится искать файл fav icon

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

Используйте запрошенный путь и объединяйтесь с файлом значка fav, чтобы он получал точный адрес, который его поиск

С помощью этого решена ошибка Fav.icon, которая всегда поднимается на Application_Error