Предоставление фавикона.ico в ASP.NET MVC
-
20-08-2019 - |
Вопрос
Какова окончательная / лучшая рекомендация о том, как обслуживать 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?