24

ajaxリクエスト中にsとリダイレクトをsにActionFilterAttribute変換するためにカスタムを作成しています。私は単体テストを通じてそのほとんどを配線しましたが、何らかの理由で変換が で行われる必要があると想定していましたが、そうではないことに気付きました。オーバーライドする正しいメソッドはであり、アクション メソッドの直後に呼び出されます。結果を返します。ViewResultJsonResultOnResultExecutingOnActionExecuted

私の質問は、4 つのオーバーライドすべてにブレークポイントがあり、とにあるものだけがまったく発火しているのでOnResultExecuted、正確に呼び出されているのはいつかということです。OnResultExecutingOnActionExecutingOnActionExecuted

4

2 に答える 2

16

説明した変換を実行する次の例を見てみましょう。

public class MyActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            var result = filterContext.Result as ViewResultBase;
            if (result != null && result.Model != null)
            {
                filterContext.Result = new JsonResult
                {
                    Data = result.Model,
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
            }
        }
    }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
    }
}

アクション結果のメソッドが実行OnResultExecutingされる直前にメソッドが呼び出され、その直後にメソッドが呼び出されます。ExecuteResultOnResultExecuted

于 2012-05-03T06:00:22.800 に答える
12

しばらく探して、受け入れられた答えを理解しようとした後、これを見つけました。これは、実行の順序が

  1. OnActionExecuting
  2. OnActionExecuted
  3. OnResultExecuting
  4. OnResultExecuted

リスト 2 の下にあるこのリンクを確認してください。http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs

于 2015-02-04T23:40:40.007 に答える