Ausführen von Code vor einer Aktion

9

Ich habe folgende Voraussetzung:

Bei jeder Anforderung meiner Webseite muss ich unabhängig von der Aktion, die der Benutzer aufrufen möchte, einen Code aufrufen, der prüft, ob eine Ressource vorhanden ist. Wenn ja, dann ist alles in Ordnung und die Aktionsmethode sollte wie üblich aufgerufen werden.

Wenn diese Ressource jedoch nicht verfügbar ist, möchte ich, dass alle Anforderungen eine separate Seite zurückgeben, in der der Benutzer aufgefordert wird, eine andere Ressource aus einer Liste verfügbarer auszuwählen.

Ist es also möglich, dass eine Methode vor einer Aktionsmethode ausgeführt wird, die den Aufruf der Aktionsmethode aufheben und stattdessen etwas anderes tun kann?

    
Øyvind Bråthen 03.01.2012, 07:33
quelle

2 Antworten

17

Sehen Sie sich globale Aktionsfilter an (verfügbar seit asp.net mvc 3): Ссылка

Grundsätzlich können Sie in Global.asax den Filter während des Starts Ihrer Anwendung (in Application_Start ()) global mit:

registrieren %Vor%

Sie können dann die OnActionExecuting-Methode überschreiben und die Result-Eigenschaft mit RedirectToRouteResult festlegen.

%Vor%     
yorah 03.01.2012, 07:45
quelle
5

MVC bietet mehrere Möglichkeiten, dies zu tun.

In einem Basis-Controller können Sie Controller.OnActionExecuting(context) überschreiben, das ausgelöst wird, bevor die Aktion ausgeführt wird. Sie können context.Result auf ein ActionResult (wie RedirectToAction) setzen, um die Aktion zu überschreiben.

Alternativ können Sie eine ActionFilterAttribute erstellen und genau wie oben die Methode OnActionExecuting überschreiben. Dann wenden Sie das Attribut nur auf jeden Controller an, der es benötigt.

    
Scott Rippey 03.01.2012 07:43
quelle