2017-07-12 15 views
2

カスタムアクションフィルタ属性を作成する必要があります。カスタムアクションフィルタ属性には、他の2つのフィルタの宣言が含まれています。例えばmvc 2つのフィルタを含むカスタムフィルタ

[ContainsTwoFilters] 
public ActionResult Index() 
{ 
    return View(); 
} 

の代わりに:あなたの助けのための絶望的な

[Filter1] 
[Filter2] 
public ActionResult Index() 
{ 
    return View(); 
} 

。おかげさまで

+0

あなたの両方の条件に合っています –

答えて

1

ContainsTwoFiltersFilterAttributeがクラスであり、C#で複数のクラス継承がないため、フィルタを継承することはできません。

あなたができることはContainsTwoFiltersの中で必要なFilter1Filter1のすべてのメソッドを呼び出すことです。このような

何か:

[ContainsTwoFilters] 
[Filter2] 
public ActionResult Index() 
{ 
    return View(); 
} 

あなたFilter2方法は二回呼び出されます:あなたはこのようなあなたのメソッドに注釈を付けた場合、その

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)] 
public class ContainsTwoFilters : ActionFilterAttribute 
{ 
    private Filter1Attribute filter1; 
    private Filter2Attribute filter2; 
    public ContainsTwoFilters() 
    { 
     //Init filters 
     filter1 = new Filter1Attribute(); 
     filter2 = new Filter2Attribute(); 
    } 

    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     //Here we can call 2 filters 
     filter1.OnAuthorization(filterContext); 
     filter2.OnAuthorization(filterContext); 
    } 

    public override void OnActionExecuting(ActionExecutingContext actionContext) 
    { 
     //And here only one 
     filter2.OnActionExecuting(actionContext); 
    } 
} 

注意。注意してください。

+0

この属性には「OnAuthorization」メソッドはありません。 "RouteAttribute"タイプの2つのフィルタを含めるには?ありがとう。 –

関連する問題