2

私は2つのアクションフィルターを持っています:

[Auth]
[Check]
public ActionResult Home()
{
//...
}

CheckAttrを最初に設定し、AuthAttrを解除する必要があります。

私はそれを行う方法を覚えていません。私を助けてください。

例:

アクションへのリクエストホーム->最初の作業認証フィルターとロジック別のアクションにリダイレクトする必要があります

4

1 に答える 1

3

:のResultプロパティを設定することで、実行全体を短絡させることができます。filterContext

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    filterContext.Result = new JsonResult
    {
        Data = "hello",
        JsonRequestBehavior = JsonRequestBehavior.AllowGet
    };
}

この例では、JsonResultを返しましたが、任意のActionResultを返すことができます:ViewResult、PartialViewResult、RedirectToRouteResult、...

Resultプロパティを割り当てると、このコンテキストに対してフィルターは実行されなくなります。アクションの実行自体も短絡します。

また、アクションフィルタが同じタイプから派生している場合、Orderそれぞれにプロパティを手動で割り当てない限り、アクションフィルタが実行される順序は保証されないことにも注意してください。もちろん、IAuthorizationFilterまたはなどのタイプが異なる場合IActionFilterは、アクションフィルターの前に承認フィルターが実行されることは明らかです。これは仕様によるものです。

一方、他のアクションフィルタの実行を阻止しようとしているだけで、アクション自体を実行する必要がある場合は、それを実現する方法がないため、これらのフィルタの設計を再考する必要があります。

于 2013-01-31T14:04:10.060 に答える