2017-07-12 14 views
2

Ich muss ein benutzerdefiniertes Aktion Filterattribut erstellen, das darin eine Deklaration von 2 anderen Filtern enthält.mvc benutzerdefinierten Filter, der 2 Filter enthält

Zum Beispiel:

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

Statt:

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

Hoffnungslos für Ihre Hilfe. Danke.

+0

deponds auf, was ist Ihre Bedingung für beide Filter –

Antwort

1

Sie können nicht einfach Ihren Filter in Ihrem ContainsTwoFilters becouse FilterAttribute ist Klasse erben und es gibt keine mehrfache Klassenvererbung in C#.

Sie können alle Methoden von Filter1 und Filter1 aufrufen, die Sie in Ihrem ContainsTwoFilters benötigen.

Etwas wie folgt aus:

[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); 
    } 
} 

Beachten Sie, dass, wenn Sie Ihre Methode wie folgt beschriften:

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

Ihre Filter2 Methoden zweimal aufgerufen werden. Sei vorsichtig.

+0

Was ist Route Attribut, hat dieser Filter keine "OnAuthorization" -Methode. Wie enthält man 2 Filter vom Typ "RouteAttribute"? Vielen Dank. –