ASP.NET MVCでのfavicon.icoの提供


255

ASP.NET MVCでfavicon.icoを提供する方法に関する最終的な/最良の推奨事項は何ですか?

私は現在次のことをしています。

  • RegisterRoutesメソッドの最初にエントリを追加します。

    routes.IgnoreRoute("favicon.ico");
  • アプリケーションのルートにfavicon.icoを配置します(これもドメインのルートになります)。

2つの質問があります。

  • アプリケーションのルート以外の場所にfavicon.icoを配置する方法はありませんか?これは、同じレベルで右そこにかなり不快ビーイングだContentControllers
  • このIgnoreRoute("favicon.ico")ステートメントで十分ですか、またはPhil Haackのブログ投稿で説明されているように、次のことも実行する必要があります。ルート以外のディレクトリでfavicon.icoへのリクエストを見たことがあることは知りません。

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

4
正規表現は「\」である必要があります。「。」だけでなく、favicon.icoのドットの場合。
NathanAldenSr 2012

1
これは私が使用するものです(@NathanAldenSrのアドバイスを考慮に入れ、スラッシュとバックスラッシュの両方をサポートし、favicon.pngファイルも許可します):routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*[/\\])?favicon\.((ico)|(png))(/.*)?" });
BrainSlugs83

@ BrainSlugs83-あなたのソリューションはスラッシュである私のために欠けている部分を追加しました...これは.NET vNextバージョン(ベータ5)です。 routes.MapRoute("IgnoreFavicon", "{*favicon}", new { favicon = @"(.*[/\\])?favicon\.((ico)|(png))(/.*)?" });
Rentering.com 16

訂正、vNext無視ルートroutes.MapRoute("Ingore", "{*favicon}", new { }, new { favicon = @"(.*[/\\])?favicon\.((ico)|(png))(/.*)?" }); 通知thew new {}
Rentering.com

回答:


204

ドメインのルートにfavicon.icoを配置すると、IE5、IIRCにのみ影響します。より最近のブラウザでは、別のディレクトリを指すリンクタグを含めることができるはずです。

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

IE以外のブラウザーでico以外のファイルを使用することもできます。そのため、次の条件ステートメントを使用して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]-->

25
すべての環境で機能するようにリンクを生成するには、@ Url.Contentを使用する必要があります。AlexCの応答を見る
RickAndMSFT

5
True、ASP.NETの場合。私の答えは「汎用」バージョン(プレーンHTML)を示しているため、誰でもフレームワーク/言語の選択に合わせて変更できます:)
Chris

ある重要な、これはそのブラウザを持つユーザーのために動作しませんので、IE10は、条件付きのコメントをサポートしていないことに注意すること。解決策は、ファビコンをサイトのルートディレクトリに追加することです。ファビコンへのリンクがどこにも見つからない場合、IE10はそれを自動的に取得します。
ケビンバブコック

2
IE11 PNGファビコンを理解し、条件付きステートメントである必要はありません。あなたはこの良い記事を参照してください。jonathantneal.com/blog/understand-the-favicon
qmasterの

どうもありがとう!下の部分は本当に私がpngを操作するのに役立ちます、それはページ、マスターページ、またはレイアウトの上部にある必要があるだけです。
アルパー、

226

クリスからの回答に同意しますが、これが特定の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"/>

3
そうだね。私の答えは「汎用」バージョン(HTML)を示していたので、誰でもフレームワーク/言語の選択に合わせて変更できます:)
Chris

2
@Diego-はい、rel = "SHORTCUT ICON"はInternet Explorerで使用される非標準の実装です。スペースはW3C標準の区切り文字です(developer.mozilla.org/en-US/docs/Web/HTML/Element/linkを参照)。)。Internet Explorer以外のブラウザーでは、正しい構文は<link rel = "icon" href = "path / to / favicon.ico">です-詳細についてはjonathantneal.com/blog/understand-the-faviconを参照してください。上記のように、アイコンへのパスにRazorまたはWebフォーム構文を使用できることは明らかです。
pwdst 2013年

3
MVC 4では自動的に処理されるため、この場合Url.Contentは必要ありません。使用できます。<link rel = "icon" href = "〜/ content / favicon.ico" />
スチュアートハローズ

20

1)好きな場所にファビコンを配置し、このタグをページヘッドに追加できます

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

一部のブラウザはデフォルトで/favicon.icoからファビコンを取得しようとするため、IgnoreRouteを使用する必要があります。

2)ブラウザーが別のディレクトリのファビコンを要求すると、404エラーが表示されます。マスターページの回答1にリンクタグがある場合、ブラウザーは必要なファビコンを取得します。


2
サイトをブックマークすると、ブラウザが.icoファイルを探して検索します。これは役に立ちません。しかし、ブラウザがそれを覚えているかどうか疑問に思っています。私はFiddlerで、ときどき大量のアイコンが取得されることを知っています。たぶんそれはグーグルツールバーですか?
Simon_Weaver 2009年

私はあなたが正しいと思います、ブックマークのアイコンは時々しか機能しません、なぜ私は理由を理解していません、多分これは事実です
EduardoCampañóJan

7

favicon.icoはルートフォルダにあるべきだと思います。それはただそこに属しています。

異なるアイコンを使用したい場合は、コントローラに入れてください。出来るよ。そうでない場合-ルートフォルダに残してください。


1
同意する。これはルートフォルダーにあり、他の場所には配置しないでください...ルートフォルダーにある場合、ファビコンのHTMLタグは必要ありません。すべての一般的なブラウザーで動作します...
Vinz

最初は、これは完全に強気のように見えましたが、どうやらそれを回避する方法はなく、ログにはさまざまなユーザーエージェントからの404エラーが表示され続けています。
Michiel Cornille 2016

3

上記のどれもうまくいきませんでした。私はようやくfavicon.icoをmyicon.icoに名前変更してこの問題を解決し、頭の中でそれを参照しました<link rel="icon" href="~/myicon.ico" type="image/x-icon" />


2

icoファイルを返すコントローラーを作成し、そのコントローラーを指すルート/favicon.icoを登録することもできます。


2

あなたがする必要があるすべてapp.UseStaticFiles();はあなたのstartup.cs に追加することです->public void Configure(IApplicationBuilder app, IHostingEnvironment env)

ASP.netコアは、静的ファイルを取得する優れた方法を提供します。wwwrootフォルダーを使用しています。ASP.NET Coreの静的ファイルをお読みください

を使用すること<Link />はあまり良い考えではありません。なぜ誰かがfavicon.icoの各HTMLまたはcshtmlにリンクタグを追加するのですか?


0

favアイコンファイルを検索する傾向があるfavicon.icoの代わりにこれを使用してください

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

要求されたパスを使用し、favアイコンファイルと組み合わせて、検索対象の正確なアドレスを取得します。

これを使用して、常にApplication_Errorで発生するFav.iconエラーを解決しました


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.