3

次のカスタム アクション フィルターを実装する必要があります。

アクション フィルターは、アクションに適用されると、CountRowsそのOnActionExecutingハンドラーで以前に呼び出されたアクションを「記憶」し、Loginたとえばクライアント ブラウザーをアクションにリダイレクトする必要があります。しかし、ログイン アクションは、呼び出された元のアクションを何らかの形で認識している必要があります。これにより、ログインが完了すると、すぐに にリダイレクトされCountRowsます。

filterContext元のアクション名 name を に保存できると推測TempDataしていますが、一般的にシナリオを実装するにはどうすればよいですか?

4

2 に答える 2

4

これは、次のコードで簡単に実行できます。

[AttributeUsage(AttributeTargets.All)]
public class MyActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //write your logic 

        RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
        redirectTargetDictionary.Add("area", "");
        redirectTargetDictionary.Add("action", "Error");
        redirectTargetDictionary.Add("controller", "Home");
        filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);   
    }
}

MyActionFilterはリンク " ~/Home/Error " にリダイレクトします。

この例は、次のリンクからコピーされています (回答のために少し変更されています): http://www.c-sharpcorner.com/UploadFile/ff2f08/use-of-mvc-custom-action-filter/

于 2012-11-26T20:07:05.993 に答える
0

一時データは必要ありません。理想的には、SignIn GET アクションは文字列の returnUrl パラメーターを取る必要があります。次に、フィルターを使用して、filterContext.HttpContext.Request.RawUrl をサインインに渡すだけです。リダイレクト URL をサインイン フォームの非表示フィールドに書き込むようにします。次に、POST 時に認証を行い、Redirect(model.ReturnUrl) を返します。

保護されたアクションを [Authorize] 属性で装飾すると、MVC は実際にはデフォルトでこの動作をします。技術的には、RawUrl ではなく Request.Url.Path を渡しますが、概念と結果は同じです。

于 2012-05-15T23:01:20.043 に答える