Обслуживание favicon.ico в ASP.NET MVC - PullRequest
247 голосов
/ 28 января 2009

Какая последняя / лучшая рекомендация по обслуживанию 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 {favicon=@"(.*/)?favicon.ico(/.*)?"});
    

Ответы [ 8 ]

217 голосов
/ 27 марта 2012

Я согласен с ответом Криса, но, поскольку это конкретный вопрос 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"/>
196 голосов
/ 28 января 2009

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

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

Вы также можете использовать файлы не-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]-->
19 голосов
/ 28 января 2009

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

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

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

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

7 голосов
/ 28 января 2009

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

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

3 голосов
/ 08 мая 2018

Ничто из вышеперечисленного не сработало для меня. Я, наконец, решил эту проблему, переименовав favicon.ico в myicon.ico и сославшись на нее в главе <link rel="icon" href="~/myicon.ico" type="image/x-icon" />

2 голосов
/ 24 декабря 2009

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

0 голосов
/ 24 ноября 2018

Все, что вам нужно сделать, это добавить app.UseStaticFiles(); в ваш startup.cs -> public void Configure(IApplicationBuilder app, IHostingEnvironment env).

Ядро ASP.net предоставляет отличный способ получить статические файлы. Это использует папку wwwroot. Пожалуйста, прочитайте Статические файлы в ASP.NET Core .

Использование <Link /> не очень хорошая идея. Зачем кому-то добавлять тег ссылки на каждый HTML или cshtml для favicon.ico?

0 голосов
/ 11 марта 2014

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

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

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

Использование этого исправило ошибку Fav.icon, которая всегда возникает в Application_Error

...