37

私はこれが役に立たないための回避策を見つけるために多くの時間を費やしてきたので、ここの誰かがアイデアを持っているかどうかを確認したいと思いました。

ASP.NETMVC3アプリケーションでElmahを使用しています。前のリンクで受け入れられた回答とまったく同じコードを使用しています。

Global.asaxには、正しいHTTP応答でエラーページを表示するための次のコードもあります。

    /// <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は、デフォルトのエラーページを処理しようとしているのに、それを読み込もうとしています。誰かがこれを防ぐ方法について何かアイデアがありますか?

4

5 に答える 5

32

base.OnException(context);から派生したカスタムエラーハンドラのメソッドを呼び出さないでくださいHandleErrorAttribute。でカスタムエラー処理を実装したため、これは不要になりましたApplication_Error

于 2012-04-18T06:25:36.687 に答える
17

私はこれと同じ問題を抱えていましたが、base.OnException()をどこでも実行していませんでした。<system.web>別の可能な解決策は、私のweb.configからこれを削除することでした:

<customErrors mode="On" />
于 2013-10-01T16:07:54.753 に答える
4

Elmah.MVCを使用していて、カスタムエラーページを使用したい場合は、Web.configで以下の値をtrueに変更するだけです。

<add key="elmah.mvc.disableHandleErrorFilter" value="true" />

これにより、Elmahロギングが有効になりますが、デフォルトのエラーページにリダイレクトしようとするのを防ぎます。

于 2018-04-13T18:32:37.807 に答える
3

サイトが〜/ Errorに移動しようとしていますが、存在しないために見つかりません。

Web.configでcustomErrorsを削除または無効化しようとしています。デフォルトのonに設定して、 〜/Errorにリダイレクトします

Web.configを投稿したい(機密情報を省略したい)場合は、おそらく私がお手伝いします。私は最近、エルマと同様の問題に取り組んできました。

于 2012-04-17T21:39:32.733 に答える
1

Elmah.mvcを使用する場合は、この設定をtrueに変更すると役立ちます。

<add key="elmah.mvc.disableHandler" value="true" />
<add key="elmah.mvc.disableHandleErrorFilter" value="true" />
于 2018-01-11T11:26:47.353 に答える