Können Sie eine Action in ASP.NET-MVC auf jeder Aktion anwenden
-
19-08-2019 - |
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?
Lösung
Ja, Sie können dies tun, aber es ist nicht so, wie es aus der Box funktioniert. Ich habe folgende Möglichkeiten:
- Erstellen Sie eine Klasse Basis-Controller und haben alle Ihre Controller von ihm erben
- Erstellen Sie eine Aktion Filterattribut und haben es von FilterAttribute erben und IActionFilter
- 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.