Ich bin mir immer noch nicht ganz im Klaren darüber, warum ich benutzerdefinierte Aktionsfilter erstellen müsste. Vielleicht würden ein paar Beispiele helfen.
Gibt es in Ihrem Projekt Aktionsfilter, von denen Sie glauben, dass sie ein Muss sind? Vielleicht sogar so wichtig, dass Sie sie für alle Ihre MVC-Projekte wiederverwenden?
Ich benutze einen "Logging" -Action-Filter, um alle Aufrufe an meine Controller mit einem Dump der Parameter zu protokollieren - dies kann sehr nützlich sein während der Tests von Drittanbietern, um zu sehen, wie / warum / wann Leute mit der Anwendung interagieren .
Obwohl es kein Aktionsfilter ist, platziere ich auch einen Logging-Hook in meine Repositories, der das von jedem Linq2SQL-Code generierte SQL ablegt ... wieder nützlich, um genau zu sehen, was genau wann ausgeführt wird.
Mein favorisierter "Muss" -Filter, den ich verwende, ist einer, der das Ansichtsmodell prüft, um zu sehen, ob es Nulllisten gibt. Wenn ja, versucht es, sie aus der Datenbank zu füllen. Ich benutze dies hauptsächlich zum Auffüllen von freigegebenen Dropdown-Listen, so dass ich diesen Code nicht in die Controller-Aktion einfügen muss.
Nicht unterstützter Browserfilter (UBF) - überprüft Request.Browser und leitet zur Browser-Download-Seite oder leichten Seite um.
Standardmäßig unterstützen alle unsere Controller nur Browser, die von jQuery unterstützt werden. Aber Programmierer van Mark Controller mit speziellen Attribut für das Überschreiben von UBF
MVC3 neue globale Filter macht UBF noch einfacher.
Jede öffentlich zugängliche Website benötigt sicherlich eine Art menschliche Captcha-Validierung. Warum also nicht den, der sehr stark ist und einen sehr guten Zweck dahinter hat? reCaptcha .
Dies ist ein alltägliches Szenario zum Erstellen eindeutiger Datensätze in der Datenbank. Angenommen, Sie haben eine Entität User
. Sie haben alle möglichen Validierungsattribute darauf gesetzt, aber es gibt einen, den Sie nicht anlegen können. Und das ist, ob die Entity-Instanz eindeutig ist.
Warum brauchen wir überhaupt eins?
Dies sind die zwei häufigsten Prozesse mit User
entity, bei denen die Validierung beteiligt ist:
Wenn Sie also einen neuen Benutzer anlegen, müssen Sie höchstwahrscheinlich prüfen, ob er in Ihrer Datenbank eindeutig ist (entweder Benutzername oder E-Mail oder etwas Ähnliches; etwas muss auf Eindeutigkeit geprüft werden).
Aber wenn Sie ein Update durchführen, sollte die Eindeutigkeit nicht überprüft werden, da der Benutzer bereits in der Datenbank existiert.
Durch Verwendung eines Aktionsfilters für die Aktion Create
. Aber da diese Art von Filter verwendet werden soll, ist es bei allen Arten von Entitäten eine weise Sache, sie generischer und wiederverwendbar zu machen, so dass wir tatsächlich alle Arten von Entitäten verwenden können.
Ich habe zwei, ohne die ich nicht leben kann:
a) AjaxMasterPageInjectorAttribute: Aufgabe dieses kleinen Kerls ist es, zu überprüfen, ob die Anfrage IsAjax () ist und dann zu der chrombasierten AjaxMasterPage zu wechseln. Corolarry ist der JsonCommandInterceptor - er nimmt die Antwort und ändert sie je nach Bedarf in einen JSON-Befehl für die Ajax-Szenarien. Ermöglicht es, eine einzelne Aktionskette zu erstellen, die dynamisch zu einem Ajaxy wird, wenn Sie es benötigen.
b) ViewModelWrapperInjectorAttribute: Erfasst das Ansichtsmodell und fügt es in einen globaleren SiteWide ViewModelWrapper ein. Hält Ihre Aktionen darauf konzentriert, das zu handhaben, was sie sollten, und unterstützt Sie davon, den ViewModelWrapper an einem eher infrastrukturellen Ort zu platzieren / bereitzustellen.
Tags und Links asp.net-mvc c# action-filter