ASP.NET MVC'de favicon.ico sunulması


255

ASP.NET MVC favicon.ico hizmet nasıl nihai / en iyi öneri nedir?

Şu anda aşağıdakileri yapıyorum:

  • RegisterRoutes yöntemimin en başına bir girdi ekleme :

    routes.IgnoreRoute("favicon.ico");
  • Uygulamamın kök dizinine favicon.ico yerleştiriliyor (bu benim etki alanımın da kökü olacak).

İki sorum var:

  • Uygulamamın kökü dışında bir yere favicon.ico koymanın bir yolu yok mu? Bu aynı seviyede orada olmak iğrenç oldukça var Contentve Controllers.
  • Bu IgnoreRoute("favicon.ico")ifade yeterli mi - yoksa Phil Haack'in bir blog yazısında tartışıldığı gibi aşağıdakileri de yapmalıyım . Hiç bu gereksiz yapar (ama nasıl yapılacağını bilmek iyi) kök dışında herhangi bir dizinde favicon.ico için bir istek gördüm farkında değilim.

    routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});

4
Normal ifadeniz '\' olmalıdır. sadece '.' değil, favicon.ico'daki nokta için.
NathanAldenSr

1
Kullandığım şey bu (@ NathanAldenSr'in tavsiyelerini dikkate alıyor, hem ileri hem de geri eğik çizgileri destekliyor ve aynı zamanda favicon.png dosyalarına izin veriyor):routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*[/\\])?favicon\.((ico)|(png))(/.*)?" });
BrainSlugs83

@ BrainSlugs83 - Sen çözüm benim için eğik çizgiler olan eksik parçası ekledi ... İşte bir .NET vNext sürümü (beta-5). routes.MapRoute("IgnoreFavicon", "{*favicon}", new { favicon = @"(.*[/\\])?favicon\.((ico)|(png))(/.*)?" });
Rentering.com

Düzeltme, routes.MapRoute("Ingore", "{*favicon}", new { }, new { favicon = @"(.*[/\\])?favicon\.((ico)|(png))(/.*)?" });new {}
vNext

Yanıtlar:


204

Favicon.ico'nun etki alanınızın kök dizinine yerleştirilmesi yalnızca IE5, IIRC'yi etkiler. Daha modern tarayıcılar için başka bir dizine işaret edecek bir bağlantı etiketi ekleyebilmeniz gerekir:

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

IE dışındaki tarayıcılar için ico olmayan dosyaları da kullanabilirsiniz, bunun için bir PNG'den FF'ye vb. Hizmet etmek için aşağıdaki koşullu ifadeyi ve IE'ye bir ICO'yu kullanabilirim:

<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]-->

25
Bağlantıyı tüm ortamlarda çalışacak şekilde oluşturmak için @ Url.Content kullanmanız gerekir. AlexC'nin yanıtına bakın
RickAndMSFT

5
ASP.NET için doğru. Cevabım "genel" sürümü (düz HTML) gösterir, böylece herkes çerçeve / dil seçimine uyacak şekilde değiştirebilir :)
Chris

Öyle önemli bu o tarayıcı olan kullanıcılar için çalışma olmaz bu yüzden, IE10 koşullu yorum desteklemiyor unutmayın. Bir çözüm, favicon'unuzu sitenizin kök dizinine eklemek olacaktır; IE10, herhangi bir yerde bir favicon için bağlantı bulamazsa otomatik olarak alınır.
Kevin Babcock

2
IE11 PNG favicon'u anlayın ve koşullu ifadeye gerek yok. Bu iyi makaleyi görmelisin: jonathantneal.com/blog/understand-the-favicon
QMaster

Teşekkürler ahbap! Alt kısım gerçekten png ile çalışmama yardımcı oluyor, sadece sayfanın, ana sayfanın veya mizanpajın üstünde olması gerekiyor.
Alper

226

Chris'in cevabına katılıyorum, ancak bunun belirli bir ASP.NET MVC sorusu olduğunu görmek ya Razor sözdizimini kullanmak daha iyi olurdu:

<link rel="icon" href="@Url.Content("~/content/favicon.ico")"/>

Veya geleneksel olarak

<link rel="icon" href="<%= Url.Content("~/content/favicon.ico") %>"/>

ziyade

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

3
Doğru. Cevabım "genel" sürümü (HTML) göstermekti, bu yüzden herkes çerçeve / dil seçimlerine uyacak şekilde değiştirebilir :)
Chris

2
@Diego - Evet, rel = "SHORTCUT ICON", Internet Explorer tarafından kullanılan standart dışı bir uygulamadır. Alan, W3C standartlarında bir ayırıcı karakterdir (bkz. Developer.mozilla.org/en-US/docs/Web/HTML/Element/link ). Internet Explorer dışındaki tarayıcılarda doğru sözdizimi <link rel = "icon" href = "path / to / favicon.ico"> - daha fazla bilgi için bkz. Jonathantneal.com/blog/understand-the-favicon . Açıkça, yukarıdaki gibi simge yolu için Razor veya Web Forms sözdizimini kullanabilirsiniz.
pwdst

3
MVC 4 ile otomatik olarak işleneceği için bu durumda Url.Content'e ihtiyacınız olmayacak, sadece kullanabilirsiniz; <link rel = "icon" href = "~ / content / favicon.ico" />
Stuart Hallows

20

1) Favicon'unuzu istediğiniz yere koyabilir ve bu etiketi sayfa başınıza ekleyebilirsiniz

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

bazı tarayıcılar varsayılan olarak favicon'u /favicon.ico'dan almaya çalışsa da, IgnoreRoute'u kullanmalısınız.

2) Bir tarayıcı başka bir dizindeki favicon için bir istekte bulunursa, iyi bir 404 hatası alırsınız ve ana sayfanızda cevap 1'de bağlantı etiketi varsa tarayıcı istediğiniz favicon'u alır.


2
tarayıcılar gidip siteye yer işareti koyarsanız .ico dosyasını arayacaktır - bu yardımcı olmaz. ama tarayıcının bunu hatırlayıp hatırlamadığını merak ediyorum. Ben sadece Fiddler bazen bazen bir sürü simgeler görmek olduğunu biliyorum biliyorum. belki de google araç çubuğu olsa?
Simon_Weaver

haklı olduğunu düşünüyorum, yer imleri için simgeler bazen işe yarıyor, nedenini
bulamadım

7

Favicon.ico'nun kök klasörde olması gerektiğini düşünüyorum . Sadece oraya ait.

Farklı simgeleri sunuculaştırmak istiyorsanız - denetleyiciye koyun. Bunu yapabilirsin. Değilse - sadece kök klasörde bırakın.


1
Katılıyorum. Kök klasöründedir ve başka bir yerde olmamalıdır ... Kök klasördeyse favicon için HTML Etiketine gerek yoktur. Tüm yaygın tarayıcılarla çalışır ...
Vinz

İlk başta, bu benim için mutlak boğa gibi görünüyordu, ama görünüşe göre etrafında bir yol yok, günlük kaydımız farklı kullanıcı aracılarından 404 hataları gösteriyor.
Michiel Cornille

3

Yukarıdakilerin hiçbiri benim için çalışmadı. Sonunda favicon.ico 'yu myicon.ico olarak yeniden adlandırarak ve kafamda referans alarak bu sorunu çözdüm<link rel="icon" href="~/myicon.ico" type="image/x-icon" />


2

Ayrıca ico dosyasını döndüren bir denetleyici oluşturmak ve /favicon.ico yolunu bu denetleyiciyi işaret edecek şekilde kaydetmek de mümkün olmalıdır.


2

Yapmanız gereken tek şey app.UseStaticFiles();startup.cs -> içine eklemek public void Configure(IApplicationBuilder app, IHostingEnvironment env).

ASP.net çekirdek statik dosyaları almak için mükemmel bir yol sağlar. Bu wwwroot klasörünü kullanıyor. Lütfen ASP.NET Core'daki Statik dosyaları okuyun .

Kullanmak <Link />çok iyi bir fikir değil. Neden birisi favicon.ico için her HTML veya cshtml bağlantı etiketini eklesin?


0

Bunu yalnızca fav simge dosyasını arama eğiliminde olan favicon.ico yerine kullanın

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

İstenen yolu kullanın ve fav simge dosyası ile birleştirin, böylece aradığı doğru adresi alır

Bu, her zaman Application_Error üzerinde ortaya çıkan Fav.icon hatasını çözdü


0

.Net Core'da wwwroot yerine favicon.ico'nun / lib içine yerleştirilmesi sorunu çözdü

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.