2011-12-28 16 views
0

コントローラでエラー500ページを設定しましたが、Webconfigで500が発生したときに表示するビューです。私はエラーに私のdevのオンAsp.net MVC 3 500サーバーでエラーログが機能していません

protected void Application_Error(object sender, EventArgs e) 
    { 
     var objErr = Server.GetLastError().GetBaseException(); 
     var err = string.Concat("Error in: ", Request.Url, "\nMessage:", objErr.Message, "\nStack Trace:", objErr.StackTrace); 
     DatabaseLogging.WriteLog(err, 3); 
    } 

をログのApplication_Errorイベントで

<httpErrors errorMode="Custom" existingResponse="Replace"> 
     <remove statusCode="404" /> 
     <remove statusCode="500" /> 
     <error statusCode="404" responseMode="ExecuteURL" path="/error/404" /> 
     <error statusCode="500" responseMode="ExecuteURL" path="/error/500" /> 
    </httpErrors> 

それは完璧に動作しenvirement、例外がログに記録され、エラーページが表示されます。受け入れ環境では、500エラーページが表示されますが、実際のエラーはログに記録されません。次のエラーが記録されます。

Message:The view 'Error' or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/User/Error.aspx ~/Views/User/Error.ascx ~/Views/Shared/Error.aspx ~/Views/Shared/Error.ascx ~/Views/User/Error.cshtml ~/Views/User/Error.vbhtml ~/Views/Shared/Error.cshtml ~/Views/Shared/Error.vbhtml Stack Trace: at System.Web.Mvc.ViewResult.FindView(ControllerContext context)  at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)  at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)  at System.Web.Mvc.Controller.ExecuteCore()  at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)  at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5()  at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()  at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d()  at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()  at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

誰でもこの問題を解決する方法がありますか? 以下のルートがマップされます。

 // Error pages 
     routes.MapRoute("Error404", "error/404", new { controller = "Error", action = "Error404" }); 
     routes.MapRoute("Error500", "error/500", new { controller = "Error", action = "Error500" }); 

答えて

1

を私はMVC HandleError属性はすべてのアクションに対してデフォルトで有効になっている、ここでジャンプしていると思いますグローバルフィルタをインストールします。

web.configの<customErrors mode="?"の部分が表示されていません。私はmode="remoteOnly"に設定されていると思いますが、これはあなたが見る動作を説明します。

devマシンでローカルに実行している場合、customErrors mode="remoteOnly"とIIS設定(ASP.NETではない)の一部である<httpErrors要素を設定するとASP.NETのcustomErrors処理がバイパスされ、対応するページが表示されます設定したhttpステータスコード。

リモートマシンで実行すると、ASP.NETエラー処理がアクティブになり、HandleError属性が、表示するデフォルトのエラービューであるErrorを探しています。

Errorというビューがない場合、ASP.NET MVCは例外を発生させ、設定されたエラービューを見つけることができません。

filters.Add(new HandleErrorAttribute()); 

あなたのケースでは、最も簡単な解決策はglobal.asax.csに以下の行を除去することにより、グローバルにインストールHandleErrorフィルタを削除することです

1

はあなたのglobal.asaxから次の行を削除します。

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    // filters.Add(new HandleErrorAttribute()); <!-- remove this 
} 
関連する問題