Обслуживание 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