Frage

Ich will eine Action in ASP.NET MVC zu jeder Aktion ich in meiner Anwendung habe -. auf jedem Controller

Gibt es eine Möglichkeit, dies zu tun, ohne es zu jeder einzelnen Action Methode anwenden?

War es hilfreich?

Lösung

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

  1. Erstellen Sie eine Klasse Basis-Controller und haben alle Ihre Controller von ihm erben
  2. Erstellen Sie eine Aktion Filterattribut und haben es von FilterAttribute erben und IActionFilter
  3. Dekorieren Sie Ihre Basis Controller-Klasse mit dem neuen Action-Filter-Attribute

Hier ist ein Beispiel des Aktionsfilter Attribut:

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 ein Beispiel der Basis Controller-Klasse mit diesem Attribute:

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

Mit dieser Methode, solange Ihre Controller-Klassen von Controller erben dann der SetCulture Action-Filter immer dann ausgeführt werden würde. Ich habe eine vollständige Probe und Post zu diesem wenn auf meinem Blog würden Sie etwas ausführlicher mag.

Ich hoffe, das hilft!

Andere Tipps

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

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

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top