6

いくつかのアクションを持つコントローラーがあります。サービスのIsCatフィールドが false の場合、アクションをリダイレクトする必要があります。

このようなもの:

    public ActionResult MyCatAction()
    {
        if (MyService.IsCat==false)
            return RedirectToAnotherControllerAction();
     ...

これを属性で実行し、コントローラーのアクション セット全体に適用できますか?

4

4 に答える 4

5

この場合は、アクション フィルターを使用します。

アクション メソッドの実行をラップするアクション フィルター。このフィルターは、追加のデータをアクション メソッドに提供する、戻り値を検査する、またはアクション メソッドの実行をキャンセルするなど、追加の処理を実行できます。

ここに素敵な MSDN のハウツーがあります:ハウツー: カスタム アクション フィルターを作成する

あなたの場合、次のようなものがあります。

public class RedirectFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (MyService.IsCat==false)
            return RedirectToAnotherControllerAction();
    }
}

次に、このフィルターをコントローラー レベルで適用します (すべてのコントローラー アクションに適用します)。

[RedirectFilterAttribute]
public class MyController : Controller
{
   // Will apply the filter to all actions inside this controller.

    public ActionResult MyCatAction()
    {

    }    
}

またはアクションごと:

[RedirectFilterAttribute]
public ActionResult MyCatAction()
{
     // Action logic
     ...
}    
于 2013-03-28T16:09:30.520 に答える
2

はい。

アクション フィルターについて

アクション フィルターは属性です。ほとんどのアクション フィルターは、個々のコントローラー アクションまたはコントローラー全体のいずれかに適用できます。

(また、アプリケーション全体に対してグローバルにすることもできます)。

于 2013-03-28T16:08:00.350 に答える
1

それは非常に簡単なはずであり、MS ドキュメントには非常に優れたウォークスルーがあります。

http://msdn.microsoft.com/en-us/library/dd381609(v=vs.100).aspx

于 2013-03-28T16:06:50.243 に答える
1

はい。アクション フィルターを使用して、結果を変更できます。以下は、そのようなことを行う単純な属性です。

public class RedirectOnCat : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if(MyService.IsCat == false)
            filterContext.Result = new RedirectResult(/* whatever you need here */);
    }
}

OnActionExecuted非常によく似た方法でコントローラーをオーバーライドすることもできます。

于 2013-03-28T16:11:18.843 に答える