Jaka jest ostateczna / najlepsza rekomendacja dotycząca sposobu obsługi favicon.ico w ASP.NET MVC?
Obecnie wykonuję następujące czynności:
Dodanie wpisu na samym początku mojej metody RegisterRoutes:
routes.IgnoreRoute("favicon.ico");
Umieszczenie favicon.ico w katalogu głównym mojej aplikacji (która również będzie katalogiem głównym mojej domeny).
Mam dwa pytania:
- Czy nie ma sposobu, aby umieścić favicon.ico w innym miejscu niż katalog główny mojej aplikacji. To jest dość niegrzeczne, będąc na tym samym poziomie co
Content
iControllers
. Czy to
IgnoreRoute("favicon.ico")
oświadczenie jest wystarczające - czy powinienem również wykonać następujące czynności, jak omówiono w poście na blogu Phila Haacka . Nie wiem, czy kiedykolwiek widziałem prośbę do favicon.ico w katalogu innym niż root - co spowodowałoby, że byłoby to niepotrzebne (ale dobrze jest wiedzieć, jak to zrobić).routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
asp.net
asp.net-mvc
razor
favicon
Simon_Weaver
źródło
źródło
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*[/\\])?favicon\.((ico)|(png))(/.*)?" });
routes.MapRoute("IgnoreFavicon", "{*favicon}", new { favicon = @"(.*[/\\])?favicon\.((ico)|(png))(/.*)?" });
routes.MapRoute("Ingore", "{*favicon}", new { }, new { favicon = @"(.*[/\\])?favicon\.((ico)|(png))(/.*)?" });
Zawiadomienie thewnew {}
,Odpowiedzi:
Umieszczenie favicon.ico w katalogu głównym domeny naprawdę wpływa tylko na IE5, IIRC. W przypadku nowocześniejszych przeglądarek powinno być możliwe dołączenie znacznika odsyłacza do innego katalogu:
Możesz również użyć plików innych niż ico dla przeglądarek innych niż IE, dla których być może użyłbym następującej instrukcji warunkowej do obsługi plików PNG w FF itp. Oraz ICO w IE:
źródło
Zgadzam się z odpowiedzią Chrisa, ale widząc to konkretne pytanie ASP.NET MVC, lepiej byłoby użyć dowolnej składni Razor:
Lub tradycyjnie
zamiast
źródło
1) Możesz umieścić swoją ulubioną stronę w dowolnym miejscu i dodać ten tag do nagłówka strony
chociaż niektóre przeglądarki domyślnie spróbują pobrać favicon z /favicon.ico, więc powinieneś użyć IgnoreRoute.
2) Jeśli przeglądarka poprosi o favicon w innym katalogu, otrzyma błąd 404, co jest w porządku, a jeśli masz link link w odpowiedzi 1 na stronie wzorcowej, przeglądarka otrzyma favicon, który chcesz.
źródło
Myślę, że favicon.ico powinien znajdować się w folderze głównym. Po prostu tam należy.
Jeśli chcesz serwować różne ikony - włóż to do kontrolera. Możesz to zrobić. Jeśli nie - zostaw go w folderze głównym.
źródło
Żadne z powyższych nie działało dla mnie. W końcu rozwiązałem ten problem, zmieniając nazwę favicon.ico na myicon.ico i odwołując się do niego w głowie
<link rel="icon" href="~/myicon.ico" type="image/x-icon" />
źródło
Powinno być także możliwe utworzenie kontrolera, który zwraca plik ico i zarejestrowanie trasy /favicon.ico w celu wskazania tego kontrolera.
źródło
Wszystko, co musisz zrobić, to dodać
app.UseStaticFiles();
w pliku startup.cs ->public void Configure(IApplicationBuilder app, IHostingEnvironment env)
.Rdzeń ASP.net zapewnia doskonały sposób na uzyskanie plików statycznych. To jest za pomocą folderu wwwroot. Proszę przeczytać pliki statyczne w ASP.NET Core .
Korzystanie z
<Link />
nie jest zbyt dobrym pomysłem. Dlaczego ktoś miałby dodawać tag linku do każdego kodu HTML lub cshtml dla pliku favicon.ico?źródło
Użyj tego zamiast tylko favicon.ico, który zwykle szuka pliku ikony fav
Użyj żądanej ścieżki i połącz z plikiem ikony fav, aby uzyskać dokładny adres, którego szuka
Za pomocą tego rozwiązano błąd Fav.icon, który jest zgłaszany zawsze w błędzie Application_Error
źródło
Stwierdzono, że w .Net Core umieszczenie favicon.ico w / lib zamiast wwwroot rozwiązuje problem
źródło