Вопрос

Какова окончательная / лучшая рекомендация о том, как обслуживать favicon.ico в ASP.NET MVC?

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

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

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

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

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

    routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
    
Это было полезно?

Решение

Размещение значка.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]-->

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top