私はこれを回避するための回避策を理解するために多くの時間を費やしてきたので、ここに誰かがアイデアを持っているかどうかを確認したいと思いました。
私は 私のASP.NET MVC3アプリケーションではElmah を使用しています。前のリンクで受け入れられた回答とまったく同じコードを使用しています。
また、正しいHTTP応答でエラーページを表示するために、Global.asaxにこのコードがあります。
/// <summary>
/// The customErrors functionality provided by ASP.NET results in HTTP 302 redirects occurring which doesn't accurately reflect what the real HTTP code of the response was.
/// This method can be used to handle specific HTTP codes without an intermediate redirect.
/// </summary>
protected void Application_Error() {
var exception = Server.GetLastError();
var httpException = exception as HttpException;
Response.Clear();
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Error";
routeData.Values["action"] = "Error500";
Response.StatusCode = 500;
if (httpException != null) {
Response.StatusCode = httpException.GetHttpCode();
Response.TrySkipIisCustomErrors = true;
switch (Response.StatusCode) {
case 403:
routeData.Values["action"] = "Error403";
break;
case 404:
routeData.Values["action"] = "Error404";
routeData.Values["message"] = httpException.Message;
break;
case 500:
routeData.Values["action"] = "Error500";
break;
}
}
IController errorsController = new ErrorController();
var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
errorsController.Execute(rc);
}
この問題は、自分の(ローカル)開発マシンにいないときに発生します(最初は customErrors 関連であると思いました)。例外がスローされると、Elmahがエラーを処理して正しく記録します。また、正しいエラーページが表示されます。ただし、正しいエラーページが表示される前に、別の中間例外がログに記録されていることがわかります。
The view 'Error' or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/Articles/Error.aspx ~/Views/Articles/Error.ascx ~/Views/Shared/Error.aspx ~/Views/Shared/Error.ascx ~/Views/Articles/Error.cshtml ~/Views/Articles/Error.vbhtml ~/Views/Shared/Error.cshtml ~/Views/Shared/Error.vbhtml
ASP.NETは、デフォルトのエラーページを処理しようとしているにもかかわらず、それをロードしようとしています。これを防ぐ方法について誰かが何か考えを持っていますか?
HandleErrorAttribute
から派生するカスタムエラーハンドラーでbase.OnException(context);
メソッドを呼び出さないでください。 Application_Error
にカスタムエラー処理を実装したので、もう必要ありません。
私はこれと同じ問題を抱えていましたが、どこでもbase.OnException()を実行していませんでした。別の可能な解決策は、これを私のweb.configの<system.web>
から削除することでした。
<customErrors mode="On" />
あなたのサイトが〜/ Errorに移動しようとしていて、存在しないので見つけられません。
Web.configでcustomErrorsを削除または無効にしてみます。私はonのデフォルトに設定して〜/ Errorにリダイレクトすることを望んでいます
Web.configを投稿したい場合(機密情報を省略)、おそらく私がお手伝いできます。私は最近Elmahで同様の問題に対処しました。
Elmah.MVCを使用していて、カスタムエラーページを使用したい場合は、Web.configで以下の値をtrueに変更するだけです。
<add key="elmah.mvc.disableHandleErrorFilter" value="true" />
これにより、Elmahのログが有効になりますが、デフォルトのエラーページにリダイレクトされなくなります。
Elmah.mvcを使用する場合は、この設定をtrueに変更すると役立ちます。
<add key="elmah.mvc.disableHandler" value="true" />
<add key="elmah.mvc.disableHandleErrorFilter" value="true" />