2

ASP.NET MVC3 は初めてです。MVC3 のグローバル カスタム エラー ページを作成するにはどうすればよいですか? 一般的な考え方は、例外がスローされたときにユーザーに一般的なメッセージを表示し、開発者が後で調査できるように例外をデータベースに記録するというものです。

よろしくお願いします。

これが私がglobal.asax.csでやったことです:

    protected void Application_Error()
    {
        var exception = Server.GetLastError();

        Log.Error("Exception", exception);

        var httpException = exception as HttpException;
        Response.Clear();
        Server.ClearError();
        var routeData = new RouteData();
        routeData.Values["controller"] = "Error";
        routeData.Values["action"] = "General";
        routeData.Values["exception"] = exception;
        Response.StatusCode = 500;
        if (httpException != null)
        {
            Response.StatusCode = httpException.GetHttpCode();
            switch (Response.StatusCode)
            {
                case 403:
                    routeData.Values["action"] = "Http403";
                    break;
                case 404:
                    routeData.Values["action"] = "Http404";
                    break;
            }
        }

        IController errorsController = new ErrorController();
        var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
        errorsController.Execute(rc);
    }
4

3 に答える 3

1

私が自分のプロジェクトで行ったことは、以下のようにイベントを作成しBaseControllerてオーバーライドしたことです。OnException

protected override void OnException(ExceptionContext filterContext)
{
    // do some logging using log4net or signal to ELMAH
    filterContext.ExceptionHandled = true;
    var exModel = new HandleErrorInfo(filterContext.Exception,  
                  filterContext.RouteData.Values["controller"].ToString(), 
                  filterContext.RouteData.Values["action"].ToString());
    View("Error", exModel).ExecuteResult(ControllerContext);
}

HandleErrorまた、 に登録されているアクション フィルターを削除しましたGlobal.asax.cs

Error注:共有フォルダーに名前の付いたビューが必要です。

更新: ビューからエラー情報を抽出するには、ビューをモデルErrorにバインドする必要があります。ErrorHandleErrorInfo

@model System.Web.Mvc.HandleErrorInfo

次に、ビュー内のどこからでも例外に簡単にアクセスできます。

@Model.Exception
于 2012-04-20T13:38:58.063 に答える
1

ファイルにメソッドをGlobal.asax実装します。Application_Error

    protected void Application_Error() { 
        HttpContext ctx = HttpContext.Current; 
        var error = ctx.Server.GetLastError();
        ctx.Response.Clear(); 
        ctx.Response.End(); 
    }

Maess のコメントのフォローアップ:

これを読んでください:asp.net mvc 3でのエラー処理

于 2012-04-20T13:32:34.547 に答える
0

Error というビューを作成し、Views\Shared フォルダーに追加します。次に、catch ブロックで、エラーをログに記録した後、アクションをエラー ビューにリダイレクトします。洗練されたメッセージを表示したい場合は、Error モデルを作成してビューに渡すか、情報を ViewBag に入れます。

未処理の例外と HTTP エラーについては、Ropstah の投稿を参照してください。

于 2012-04-20T13:32:37.417 に答える