ビュー(部分ビューではない)がロードされるたびに単一の「ファイルが存在しません」エラーをログに記録する基本的なASP.NETMVC2サイトがあります。これは、マスターページから存在しないファイルを参照しているためだと確信していますが、ファイルがどれであるかがわかりません。
スタックトレースは役に立ちません(以下を参照)。誰かがこれを最もよくデバッグする方法について何かヒントがありますか?
File does not exist. : at System.Web.StaticFileHandler.GetFileInfo(String virtualPathWithPathInfo, String physicalPath, HttpResponse response)
at System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext context)
at System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
あなたが言うように、それはおそらくあなたのマスターページによって参照されている不足しているファイルまたは画像です。エラーをキャプチャするには、次のエラーハンドラをGlobal.asax
に追加します
protected void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex.Message == "File does not exist.")
{
throw new Exception(string.Format("{0} {1}", ex.Message, HttpContext.Current.Request.Url.ToString()), ex);
}
}
これにより、ページが要求しているリソースがわかります。
または、デバッグする場合は、イミディエイトウィンドウに次の行を入力して確認できます。
? HttpContext.Current.Request.Url.ToString()
CSSファイルで「resource_path」が存在しないurl(resource_path)を確認してください。
同じ例外が発生していました。見つかった問題は、ファイルシステムではなくプロジェクトから画像ファイルが欠落しているCSSファイルにありました。たとえば、次のような行です。
background-image: url( /images/foo.png );
「foo.png」ファイルがimagesフォルダーにない場合。
最後の例外をHttpExceptionとしてキャストして、HTMLステータスコードを取得できます。
HttpException httpEx = Server.GetLastError() as HttpException;
if( httpEx != null )
httpEx.GetHttpCode(); // Will be HTML status code, 404 in this case.
ただし、どのファイルが欠落しているかについての情報は含まれていません。このエラーが発生していたページのすべてのCSSクラス宣言を確認して、不足しているファイルを見つけました。
Global.asax
ファイルに次のメソッドを追加します
protected void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
Log.Error("An error occurred", ex);
Log.Error("Requested url: ", Request.RawUrl);
}
Request.RawUrl
エラーが発生する正確なURLを指定します。
これで、ログファイルに次のように表示されます。
Requested url: /favicon.ico
私の場合、原因はデフォルトのホームページ、つまりdefault.aspxがないことでした。
したがって、default.aspxファイルを追加することで問題が解決しました。
ただし、このプロジェクトはユーザー向けのプロジェクトではないため、デフォルトのページは必要ありません。
これは、Webを介してレガシーシステムとインターフェイスするためのミドルウェアアプリでした。
私の場合、ブラウザコンソールに「404エラー」は見つかりませんでしたが、同じエラーが発生していました。マスターファイルをチェックしても、不足しているファイルは見つかりませんでした。ブラウザはfavicon.icoがサイトのルートにあることを期待していることが判明しました。サイトのルートにfavicon.icoを作成しましたが、問題は解決しました。これはアイコンを生成するのに適したWebサイトでした: http://www.favicon.cc/