2009-03-16 4 views

Antwort

9

Ja, Sie können dies tun, aber es ist nicht so, wie es aus der Box funktioniert. Ich habe folgendes:

  1. eine Basis Controller-Klasse erstellen und haben alle Ihre Controller erben von ihm
  2. eine Aktion Filterattribut erstellen und haben es von FilterAttribute erben und IActionFilter
  3. Ihre Basis Controller-Klasse Verzieren mit Ihr neues Action-Filter Attribut

Hier ist eine Probe des Aktionsfilterattribut:

public class SetCultureAttribute : FilterAttribute, IActionFilter 
{ 
    #region IActionFilter implementation 

    public void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     //logic goes here 
    } 

    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     //or logic goes here 
    } 

    #endregion IActionFilter implementation 
} 

Hier ist eine Probe der Basis-Controller-Klasse mit diesem Attribute:

[SetCulture] 
public class ControllerBase : Controller 
{ 
    ... 
} 

Mit dieser Methode, solange Ihre Controller-Klassen von Controller erben dann würde der SetCulture Action-Filter immer dann ausgeführt werden. Ich habe eine vollständige Probe und Post auf diesem on my blog, wenn Sie ein bisschen mehr Details möchten.

Hoffe, dass hilft!

+0

Enthält diese nur ActionResults beeinflussen? Oder betrifft es auch andere Ergebnistypen? JsonResult, FileResult usw.? –

0

Sie müssen es nicht auf jede Aktion anwenden, Sie können es einfach auf jeden Controller anwenden (dh das Attribut auf die Klasse setzen, nicht die Methode).

Oder wie Ian erwähnt, können Sie es auf eine Basis-Controller-Klasse setzen und dann von diesem Controller erweitern.

4

Wie die Dinge besser ... 2 Jahre später haben wir

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorElmahAttribute()); 
    } 
+0

basallo - wo würdest du das nennen? oder setzen Sie es? –

+0

In der global.asax. –

Verwandte Themen