Freigeben über


ASP.NET MVC 4 – Benutzerdefinierte Aktionsfilter

Nach Web Camps Team

Download Web Camps Training Kit

ASP.NET MVC stellt Aktionsfilter zum Ausführen von Filterlogik vor oder nach dem Aufruf einer Aktionsmethode bereit. Aktionsfilter sind benutzerdefinierte Attribute, die deklarative Mittel zum Hinzufügen von Vor- und Nachaktionsverhalten zu den Aktionsmethoden des Controllers bereitstellen.

In dieser praktischen Übung erstellen Sie ein benutzerdefiniertes Aktionsfilter-Attribut in der MvcMusicStore-Lösung, um die Anforderungen des Controllers abzufangen und die Aktivität einer Website in einer Datenbanktabelle zu protokollieren. Sie können Ihren Protokollierungsfilter hinzufügen, indem Sie einen beliebigen Controller oder eine aktion einfügen. Schließlich sehen Sie die Protokollansicht, in der die Liste der Besucher angezeigt wird.

In diesem praktischen Übungslabor wird davon ausgegangen, dass Sie grundlegende Kenntnisse über ASP.NET MVC haben. Wenn Sie ASP.NET MVC noch nicht verwendet haben, empfehlen wir Ihnen, ASP.NET MVC 4 Fundamentals Hands-on Lab zu durchlaufen.

Hinweis

Alle Beispielcode und Codeausschnitte sind im Web Camps Training Kit enthalten, das unter Microsoft-Web/WebCampTrainingKit Releases verfügbar ist. Das projektspezifische Projekt für diese Übung ist unter ASP.NET MVC 4 Custom Action Filters verfügbar.

Ziele

In dieser praktischen Übung erfahren Sie, wie Sie:

  • Erstellen eines benutzerdefinierten Aktionsfilter-Attributs zum Erweitern von Filterfunktionen
  • Anwenden eines benutzerdefinierten Filterattributes durch Einfügen auf eine bestimmte Ebene
  • Globales Registrieren eines benutzerdefinierten Aktionsfilters

Voraussetzungen

Sie müssen über die folgenden Elemente verfügen, um diese Übung abzuschließen:

Setup

Installieren von Codeausschnitten

Aus Gründen der Einfachheit ist ein Großteil des Codes, den Sie entlang dieser Übung verwalten, als Visual Studio-Codeausschnitte verfügbar. Führen Sie zum Installieren der Codeausschnitte die Datei ".\Source\Setup\CodeSnippets.vsi " aus.

Wenn Sie mit den Visual Studio Code Snippets nicht vertraut sind und erfahren möchten, wie sie verwendet werden können, finden Sie in diesem Dokument den Anhang "Anhang C: Verwenden von Codeausschnitten".


Übungen

Dieses Hands-On Lab besteht aus den folgenden Übungen:

  1. Übung 1: Protokollierungsaktionen
  2. Übung 2: Verwalten mehrerer Aktionsfilter

Geschätzte Zeit zum Abschließen dieser Übung: 30 Minuten.

Hinweis

Jede Übung wird von einem Endordner begleitet, der die resultierende Lösung enthält, die Sie nach Abschluss der Übungen erhalten sollten. Sie können diese Lösung als Leitfaden verwenden, wenn Sie zusätzliche Hilfe beim Durcharbeiten der Übungen benötigen.

Übung 1: Protokollierungsaktionen

In dieser Übung erfahren Sie, wie Sie mithilfe von ASP.NET MVC 4-Filteranbietern einen benutzerdefinierten Aktionsprotokollfilter erstellen. Zu diesem Zweck wenden Sie einen Protokollierungsfilter auf die MusicStore-Website an, die alle Aktivitäten in den ausgewählten Controllern erfasst.

Der Filter erweitert ActionFilterAttributeClass und überschreibt die OnActionExecuting-Methode , um jede Anforderung abzufangen und dann die Protokollierungsaktionen auszuführen. Die Kontextinformationen zu HTTP-Anforderungen, Ausführen von Methoden, Ergebnissen und Parametern werden von ASP.NET MVC ActionExecutingContext-Klasse bereitgestellt.

Hinweis

ASP.NET MVC 4 verfügt auch über Standardfilteranbieter, die Sie verwenden können, ohne einen benutzerdefinierten Filter zu erstellen. ASP.NET MVC 4 stellt die folgenden Filtertypen bereit:

  • Autorisierungsfilter , der Sicherheitsentscheidungen darüber trifft, ob eine Aktionsmethode ausgeführt werden soll, z. B. Authentifizierung oder Überprüfen von Eigenschaften der Anforderung.
  • Aktionsfilter , der die Ausführung der Aktionsmethode umschließt. Dieser Filter kann zusätzliche Verarbeitung ausführen, z. B. zusätzliche Daten für die Aktionsmethode bereitstellen, den Rückgabewert überprüfen oder die Ausführung der Aktionsmethode abbrechen.
  • Ergebnisfilter , der die Ausführung des ActionResult-Objekts umschließt. Dieser Filter kann eine zusätzliche Verarbeitung des Ergebnisses ausführen, z. B. das Ändern der HTTP-Antwort.
  • Ausnahmefilter , der ausgeführt wird, wenn eine unbehandelte Ausnahme irgendwo in der Aktionsmethode ausgelöst wird, beginnend mit den Autorisierungsfiltern und endet mit der Ausführung des Ergebnisses. Ausnahmefilter können für Aufgaben wie das Protokollieren oder Anzeigen einer Fehlerseite verwendet werden.

Weitere Informationen zu Filteranbietern finden Sie unter diesem MSDN-Link: (https://msdn.microsoft.com/library/dd410209.aspx) .

Informationen zur MVC Music Store-Anwendungsprotokollierungsfunktion

Diese Music Store-Lösung verfügt über eine neue Datenmodelltabelle für die Websiteprotokollierung, ActionLog, mit den folgenden Feldern: Name des Controllers, der eine Anforderung erhalten hat, "Aktion aufgerufen", "Client-IP" und "Zeitstempel".

Datenmodell. ActionLog-Tabelle.

Datenmodell – ActionLog-Tabelle

Die Lösung bietet eine ASP.NET MVC-Ansicht für das Aktionsprotokoll, die unter MvcMusicStores/Views/ActionLog zu finden ist:

Aktionsprotokollansicht

Aktionsprotokollansicht

Mit dieser gegebenen Struktur konzentriert sich die gesamte Arbeit auf die Unterbrechung der Anforderung des Controllers und die Durchführung der Protokollierung mithilfe benutzerdefinierter Filterung.

Aufgabe 1 : Erstellen eines benutzerdefinierten Filters zum Abfangen der Anforderung eines Controllers

In dieser Aufgabe erstellen Sie eine benutzerdefinierte Filter-Attributklasse, die die Protokollierungslogik enthält. Zu diesem Zweck erweitern Sie ASP.NET MVC ActionFilterAttribute-Klasse und implementieren die Schnittstelle IActionFilter.

Hinweis

Das ActionFilterAttribute ist die Basisklasse für alle Attributfilter. Es stellt die folgenden Methoden bereit, um eine bestimmte Logik nach und vor der Ausführung der Controlleraktion auszuführen:

  • OnActionExecuting(ActionExecutingContext filterContext): Kurz bevor die Aktionsmethode aufgerufen wird.
  • OnActionExecuted(ActionExecutedContext filterContext): Nach dem Aufrufen der Aktionsmethode und vor der Ausführung des Ergebnisses (vor dem Rendern der Ansicht).
  • OnResultExecuting(ResultExecutingContext filterContext): Unmittelbar bevor das Ergebnis ausgeführt wird (vor dem Rendern der Ansicht).
  • OnResultExecuted(ResultExecutedContext filterContext): Nachdem das Ergebnis ausgeführt wurde (nach dem Rendern der Ansicht).

Indem Sie eine dieser Methoden in eine abgeleitete Klasse überschreiben, können Sie Ihren eigenen Filtercode ausführen.

  1. Öffnen Sie die Begin-Projektmappe unter \Source\Ex01-LoggingActions\Begin.Open the Begin solution located at \Source\Ex01-LoggingActions\Begin folder.

    1. Sie müssen einige fehlende NuGet-Pakete herunterladen, bevor Sie fortfahren. Klicken Sie hierzu auf das Menü "Projekt", und wählen Sie "NuGet-Pakete verwalten" aus.

    2. Klicken Sie im Dialogfeld "NuGet-Pakete verwalten" auf " Wiederherstellen ", um fehlende Pakete herunterzuladen.

    3. Erstellen Sie schließlich die Lösung, indem Sie auf "Buildlösung erstellen | " klicken.

      Hinweis

      Einer der Vorteile der Verwendung von NuGet besteht darin, dass Sie nicht alle Bibliotheken in Ihrem Projekt versenden müssen, wodurch die Projektgröße reduziert wird. Mit NuGet Power Tools können Sie alle erforderlichen Bibliotheken beim ersten Ausführen des Projekts herunterladen, indem Sie die Paketversionen in der Datei "Packages.config" angeben. Aus diesem Grund müssen Sie diese Schritte ausführen, nachdem Sie eine vorhandene Lösung aus dieser Übung geöffnet haben.

      Weitere Informationen finden Sie in diesem Artikel: https://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages.

  2. Fügen Sie dem Ordner "Filter" eine neue C#-Klasse hinzu, und nennen Sie sie CustomActionFilter.cs. In diesem Ordner werden alle benutzerdefinierten Filter gespeichert.

  3. Öffnen Sie CustomActionFilter.cs , und fügen Sie einen Verweis auf die Namespaces "System.Web.Mvc " und "MvcMusicStore.Models " hinzu:

    (Codeausschnitt - ASP.NET MVC 4 Custom Action Filters - Ex1-CustomActionFilterNamespaces)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using MvcMusicStore.Models;
    
  4. Erben Sie die CustomActionFilter-Klasse von ActionFilterAttribute, und implementieren Sie dann die IActionFilter-Schnittstelle.

    //...
    namespace MvcMusicStore.Filters
    {
        public class CustomActionFilter : ActionFilterAttribute, IActionFilter
        {
            //...
        }
    }
    
  5. Setzen Sie die Methode OnActionExecuting außer Kraft, und fügen Sie die erforderliche Logik hinzu, um die Ausführung des Filters zu protokollieren. Fügen Sie hierzu den folgenden hervorgehobenen Code in der CustomActionFilter-Klasse hinzu.

    (Codeausschnitt - ASP.NET MVC 4 Custom Action Filters - Ex1-LoggingActions)

    public class CustomActionFilter : ActionFilterAttribute, IActionFilter
    {
        void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
        {
            // TODO: Add your action filter's tasks here
    
            // Log Action Filter call
            using (MusicStoreEntities storeDb = new MusicStoreEntities())
            {
                ActionLog log = new ActionLog()
                {
                    Controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
                    Action = string.Concat(filterContext.ActionDescriptor.ActionName, " (Logged By: Custom Action Filter)"),
                    IP = filterContext.HttpContext.Request.UserHostAddress,
                    DateTime = filterContext.HttpContext.Timestamp
                };
                storeDb.ActionLogs.Add(log);
                storeDb.SaveChanges();
                OnActionExecuting(filterContext);
            }
        }
    }
    

    Hinweis

    OnActionExecuting-Methode verwendet Entity Framework , um ein neues ActionLog-Register hinzuzufügen. Es erstellt und füllt eine neue Entitätsinstanz mit den Kontextinformationen aus filterContext.

    Weitere Informationen zur ControllerContext-Klasse finden Sie auf msdn.

Aufgabe 2 : Einfügen eines Codeabschnittors in die Store Controller-Klasse

In dieser Aufgabe fügen Sie den benutzerdefinierten Filter hinzu, indem Sie ihn in alle Controllerklassen und Controlleraktionen einfügen, die protokolliert werden. Für diese Übung verfügt die Store Controller-Klasse über ein Protokoll.

Die Methode OnActionExecuting aus dem benutzerdefinierten ActionLogFilterAttribute-Filter wird ausgeführt, wenn ein eingefügtes Element aufgerufen wird.

Es ist auch möglich, eine bestimmte Controllermethode abzufangen.

  1. Öffnen Sie den StoreController bei MvcMusicStore\Controllers , und fügen Sie einen Verweis auf den Filters-Namespace hinzu:

    using System.Linq;
    using System.Web.Mvc;
    using MvcMusicStore.Models;
    using MvcMusicStore.Filters;
    
  2. Fügen Sie den benutzerdefinierten Filter CustomActionFilter in die StoreController-Klasse ein, indem Sie vor der Klassendeklaration das Attribut [CustomActionFilter] hinzufügen.

    ...
    [CustomActionFilter]
    public class StoreController : Controller
    {
        ...
    }
    

    Hinweis

    Wenn ein Filter in eine Controllerklasse eingefügt wird, werden auch alle zugehörigen Aktionen eingefügt. Wenn Sie den Filter nur für eine Reihe von Aktionen anwenden möchten, müssen Sie [CustomActionFilter] auf jede dieser Aktionen einfügen:

    [CustomActionFilter]
    public ActionResult Index()
    {
      ...
    }
    
    [CustomActionFilter]
    public ActionResult Browse(string genre)
    {
      ...
    }
    

Aufgabe 3 – Ausführen der Anwendung

In dieser Aufgabe testen Sie, dass der Protokollierungsfilter funktioniert. Sie starten die Anwendung und besuchen den Store, und dann überprüfen Sie protokollierte Aktivitäten.

  1. Drücken Sie F5, um die Anwendung auszuführen.

  2. Navigieren Sie zu "/ActionLog ", um den Anfangszustand der Protokollansicht anzuzeigen:

    Screenshot zeigt den Status des Aktionsprotokolls vor der Seitenaktivität.

    Protokollverfolgungsstatus vor Seitenaktivität

    Hinweis

    Standardmäßig wird immer ein Element angezeigt, das beim Abrufen der vorhandenen Genres für das Menü generiert wird.

    Aus Gründen der Einfachheit werden wir die ActionLog-Tabelle jedes Mal bereinigen, wenn die Anwendung ausgeführt wird, sodass nur die Protokolle der Überprüfung der einzelnen Aufgaben angezeigt werden.

    Möglicherweise müssen Sie den folgenden Code aus der Session_Start-Methode (in der Global.asax-Klasse ) entfernen, um ein Verlaufsprotokoll für alle Aktionen zu speichern, die im Store-Controller ausgeführt werden.

    // Clean up Logs Table
    MusicStoreEntities storeDB = new MusicStoreEntities();
    foreach (var log in 
    
    storeDB.ActionLogs.ToList())
    {
       storeDB.ActionLogs.Remove(log);
    }
    
    storeDB.SaveChanges();
    
  3. Klicken Sie im Menü auf eines der Genres , und führen Sie dort einige Aktionen aus, z. B. das Durchsuchen eines verfügbaren Albums.

  4. Navigieren Sie zu /ActionLog , und wenn das Protokoll leer ist, drücken Sie F5 , um die Seite zu aktualisieren. Überprüfen Sie, ob Ihre Besuche nachverfolgt wurden:

    Screenshot des Aktionsprotokolls, in dem Sie Ihre Besuche überprüfen können.

    Aktionsprotokoll mit protokollierter Aktivität

Übung 2: Verwalten mehrerer Aktionsfilter

In dieser Übung fügen Sie der StoreController-Klasse einen zweiten benutzerdefinierten Aktionsfilter hinzu und definieren die spezifische Reihenfolge, in der beide Filter ausgeführt werden. Anschließend aktualisieren Sie den Code, um den Filter global zu registrieren.

Es gibt verschiedene Optionen, die beim Definieren der Ausführungsreihenfolge der Filter berücksichtigt werden müssen. Beispielsweise die Order-Eigenschaft und der Filterbereich:

Sie können einen Bereich für jeden der Filter definieren, z. B. können Sie alle Aktionsfilter festlegen, die innerhalb des Controllerbereichs ausgeführt werden sollen, und alle Autorisierungsfilter, die im globalen Bereich ausgeführt werden sollen. Die Bereiche haben eine definierte Ausführungsreihenfolge.

Darüber hinaus verfügt jeder Aktionsfilter über eine Order-Eigenschaft, die verwendet wird, um die Ausführungsreihenfolge im Bereich des Filters zu bestimmen.

Weitere Informationen zur Ausführungsreihenfolge für benutzerdefinierte Aktionsfilter finden Sie in diesem MSDN-Artikel: (https://msdn.microsoft.com/library/dd381609(v=vs.98).aspx).

Aufgabe 1: Erstellen eines neuen benutzerdefinierten Aktionsfilters

In dieser Aufgabe erstellen Sie einen neuen benutzerdefinierten Aktionsfilter, der in die StoreController-Klasse eingefügt wird, und erfahren, wie Sie die Ausführungsreihenfolge der Filter verwalten.

  1. Öffnen Sie die Begin-Lösung unter \Source\Ex02-ManagingMultipleActionFilters\Begin folder. Andernfalls verwenden Sie möglicherweise die, die Sie durch Ausführen der vorherigen Übung erhalten haben.

    1. Wenn Sie die bereitgestellte Begin-Lösung geöffnet haben, müssen Sie einige fehlende NuGet-Pakete herunterladen, bevor Sie fortfahren. Klicken Sie hierzu auf das Menü "Projekt", und wählen Sie "NuGet-Pakete verwalten" aus.

    2. Klicken Sie im Dialogfeld "NuGet-Pakete verwalten" auf " Wiederherstellen ", um fehlende Pakete herunterzuladen.

    3. Erstellen Sie schließlich die Lösung, indem Sie auf "Buildlösung erstellen | " klicken.

      Hinweis

      Einer der Vorteile der Verwendung von NuGet besteht darin, dass Sie nicht alle Bibliotheken in Ihrem Projekt versenden müssen, wodurch die Projektgröße reduziert wird. Mit NuGet Power Tools können Sie alle erforderlichen Bibliotheken beim ersten Ausführen des Projekts herunterladen, indem Sie die Paketversionen in der Datei "Packages.config" angeben. Aus diesem Grund müssen Sie diese Schritte ausführen, nachdem Sie eine vorhandene Lösung aus dieser Übung geöffnet haben.

      Weitere Informationen finden Sie in diesem Artikel: https://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages.

  2. Fügen Sie dem Ordner "Filter " eine neue C#-Klasse hinzu, und nennen Sie sie MyNewCustomActionFilter.cs

  3. Öffnen Sie MyNewCustomActionFilter.cs , und fügen Sie einen Verweis auf System.Web.Mvc und den MvcMusicStore.Models-Namespace hinzu:

    (Codeausschnitt - ASP.NET MVC 4 Custom Action Filters - Ex2-MyNewCustomActionFilterNamespaces)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using MvcMusicStore.Models;
    
  4. Ersetzen Sie die Standardklassendeklaration durch den folgenden Code.

    (Codeausschnitt - ASP.NET MVC 4 Custom Action Filters - Ex2-MyNewCustomActionFilterClass)

    public class MyNewCustomActionFilter : ActionFilterAttribute, IActionFilter
    {
      void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
    
      {
            // TODO: Add your acction filter's tasks here
    
            // Log Action Filter Call
            MusicStoreEntities storeDB = new MusicStoreEntities();
    
            ActionLog log = new ActionLog()
            {
                 Controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
                 Action = filterContext.ActionDescriptor.ActionName + " (Logged By: 
    
    MyNewCustomActionFilter)",
                 IP = filterContext.HttpContext.Request.UserHostAddress,
                 DateTime = filterContext.HttpContext.Timestamp
            };
    
            storeDB.ActionLogs.Add(log);
            storeDB.SaveChanges();
    
            this.OnActionExecuting(filterContext);
      }
    }
    

    Hinweis

    Dieser benutzerdefinierte Aktionsfilter ist fast identisch mit dem, den Sie in der vorherigen Übung erstellt haben. Der Hauptunterschied besteht darin, dass das Attribut "Logged By" mit dem Namen dieser neuen Klasse aktualisiert wurde, um zu identifizieren, welcher Filter das Protokoll registriert hat.

Aufgabe 2: Einfügen eines neuen Codeabschnitts in die StoreController-Klasse

In dieser Aufgabe fügen Sie der StoreController-Klasse einen neuen benutzerdefinierten Filter hinzu und führen die Lösung aus, um zu überprüfen, wie beide Filter zusammenarbeiten.

  1. Öffnen Sie die StoreController-Klasse , die sich auf MvcMusicStore\Controllers befindet, und fügen Sie den neuen benutzerdefinierten Filter MyNewCustomActionFilter in die StoreController-Klasse ein, wie im folgenden Code dargestellt.

    [MyNewCustomActionFilter]
    [CustomActionFilter]
    public class StoreController : Controller
    {
    ...
    }
    
  2. Führen Sie nun die Anwendung aus, um zu sehen, wie diese beiden benutzerdefinierten Aktionsfilter funktionieren. Drücken Sie dazu F5, und warten Sie, bis die Anwendung gestartet wird.

  3. Navigieren Sie zu /ActionLog , um den Anfangszustand der Protokollansicht anzuzeigen.

    Der Screenshot zeigt den Status des Aktionsprotokoll-Trackers im Anfangszustand.

    Protokollverfolgungsstatus vor Seitenaktivität

  4. Klicken Sie im Menü auf eines der Genres , und führen Sie dort einige Aktionen aus, z. B. das Durchsuchen eines verfügbaren Albums.

  5. Überprüfen Sie dieses Mal, ob dies der Fall ist. Ihre Besuche wurden zweimal nachverfolgt: einmal für jeden der benutzerdefinierten Aktionsfilter, die Sie in der StorageController-Klasse hinzugefügt haben.

    Screenshot des Aktionsprotokolls mit zweimal nachverfolgten Besuchen.

    Aktionsprotokoll mit protokollierter Aktivität

  6. Schließen Sie den Browser.

Aufgabe 3: Verwalten der Filterbestellung

In dieser Aufgabe erfahren Sie, wie Sie die Ausführungsreihenfolge der Filter mithilfe der Order-Eigenschaft verwalten.

  1. Öffnen Sie die StoreController-Klasse , die sich auf MvcMusicStore\Controllers befindet, und geben Sie die Order-Eigenschaft in beiden Filtern an, wie unten dargestellt.

    [MyNewCustomActionFilter(Order = 2)]
    [CustomActionFilter(Order = 1)]
    public class StoreController : Controller
    {
    ...
    }
    
  2. Überprüfen Sie nun, wie die Filter abhängig vom Wert der Order-Eigenschaft ausgeführt werden. Sie werden feststellen, dass der Filter mit dem kleinsten Order-Wert (CustomActionFilter) der erste ist, der ausgeführt wird. Drücken Sie F5, und warten Sie, bis die Anwendung gestartet wird.

  3. Navigieren Sie zu /ActionLog , um den Anfangszustand der Protokollansicht anzuzeigen.

    Screenshot des Aktionsprotokolls vor Der Seitenaktivität.

    Protokollverfolgungsstatus vor Seitenaktivität

  4. Klicken Sie im Menü auf eines der Genres , und führen Sie dort einige Aktionen aus, z. B. das Durchsuchen eines verfügbaren Albums.

  5. Überprüfen Sie, ob Ihre Besuche dieses Mal nach dem Bestellwert der Filter nachverfolgt wurden: CustomActionFilter-Protokolle zuerst.

    Screenshot des Aktionsprotokolls mit aktivitätsreihenfolgen nach CustomActionFilter.

    Aktionsprotokoll mit protokollierter Aktivität

  6. Jetzt aktualisieren Sie den Bestellwert der Filter und überprüfen, wie sich die Protokollierungsreihenfolge ändert. Aktualisieren Sie in der StoreController-Klasse den Wert der Filterreihenfolge wie unten dargestellt.

    [MyNewCustomActionFilter(Order = 1)]
    [CustomActionFilter(Order = 2)]
    public class StoreController : Controller
    {
    ...
    }
    
  7. Führen Sie die Anwendung erneut aus, indem Sie F5 drücken.

  8. Klicken Sie im Menü auf eines der Genres , und führen Sie dort einige Aktionen aus, z. B. das Durchsuchen eines verfügbaren Albums.

  9. Überprüfen Sie, ob dieses Mal die protokolle, die vom MyNewCustomActionFilter-Filter erstellt wurden, zuerst angezeigt werden.

    Der Screenshot zeigt das Aktionsprotokoll mit Protokollen, die zuerst vom angegebenen Filter erstellt wurden.

    Aktionsprotokoll mit protokollierter Aktivität

Aufgabe 4: Globales Registrieren von Filtern

In dieser Aufgabe aktualisieren Sie die Lösung, um den neuen Filter (MyNewCustomActionFilter) als globalen Filter zu registrieren. Dadurch wird sie von allen Aktionen ausgelöst, die in der Anwendung ausgeführt werden, und nicht nur in den StoreController-Aktionen wie in der vorherigen Aufgabe.

  1. Entfernen Sie in der StoreController-Klasse das Attribut [MyNewCustomActionFilter] und die Order-Eigenschaft aus [CustomActionFilter]. Die Anzeige sollte folgendermaßen aussehen:

    [CustomActionFilter]
    public class StoreController : Controller
    {
    ...
    }
    
  2. Öffnen Sie die Datei "Global.asax ", und suchen Sie die Application_Start-Methode . Beachten Sie, dass die Anwendung bei jedem Start die globalen Filter durch Aufrufen der RegisterGlobalFilters-Methode innerhalb der FilterConfig-Klasse registriert.

    Registrieren globaler Filter in Global.asax

    Registrieren globaler Filter in Global.asax

  3. Öffnen Sie FilterConfig.cs Datei in App_Start Ordner.

  4. Hinzufügen eines Verweises zur Verwendung von System.Web.Mvc; verwenden von MvcMusicStore.Filters; Namespace.

    using System.Web.Mvc;
    using MvcMusicStore.Filters;
    
  5. Aktualisieren Sie die RegisterGlobalFilters-Methode , die Ihren benutzerdefinierten Filter hinzufügt. Fügen Sie dazu den hervorgehobenen Code hinzu:

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new MyNewCustomActionFilter());
    }
    
  6. Drücken Sie F5, um die Anwendung auszuführen.

  7. Klicken Sie im Menü auf eines der Genres , und führen Sie dort einige Aktionen aus, z. B. das Durchsuchen eines verfügbaren Albums.

  8. Überprüfen Sie, ob jetzt [MyNewCustomActionFilter] auch in HomeController und ActionLogController eingefügt wird.

    Screenshot des Aktionsprotokolls, in dem Sie den neuen benutzerdefinierten Filter überprüfen können.

    Aktionsprotokoll mit protokollierter globaler Aktivität

Hinweis

Darüber hinaus können Sie diese Anwendung in Windows Azure-Websites im folgenden Anhang B bereitstellen: Veröffentlichen einer ASP.NET MVC 4-Anwendung mithilfe von Web Deploy.


Zusammenfassung

Wenn Sie dieses Praktische Übungslabor abschließen, haben Sie erfahren, wie Sie einen Aktionsfilter erweitern, um benutzerdefinierte Aktionen auszuführen. Außerdem haben Sie erfahren, wie Sie jeden Filter in Ihre Seitencontroller einfügen. Die folgenden Konzepte wurden verwendet:

  • So erstellen Sie benutzerdefinierte Aktionsfilter mit der ASP.NET MVC ActionFilterAttribute-Klasse
  • Einfügen von Filtern in ASP.NET MVC-Controller
  • So verwalten Sie die Filterreihenfolge mithilfe der Order-Eigenschaft
  • So registrieren Sie Filter global

Anhang A: Installieren von Visual Studio Express 2012 für Web

Sie können Microsoft Visual Studio Express 2012 für Web oder eine andere "Express"-Version mit dem Microsoft-Webplattform Installer installieren. Die folgenden Anweisungen führen Sie durch die Schritte, die zum Installieren von Visual Studio Express 2012 für Web mit Microsoft-Webplattform Installer erforderlich sind.

  1. Wechseln Sie zu /iis/extensions/introduction-to-iis-express/iis-express-overview?linkid=9810169. Wenn Sie das Webplattform-Installationsprogramm bereits installiert haben, können Sie es öffnen und nach dem Produkt "Visual Studio Express 2012 for Web with Windows Azure SDK" suchen.

  2. Klicken Sie auf "Jetzt installieren". Wenn Sie nicht über das Webplattform-Installationsprogramm verfügen, werden Sie umgeleitet, um es zuerst herunterzuladen und zu installieren.

  3. Klicken Sie nach dem Öffnen des Webplattform-Installers auf "Installieren ", um das Setup zu starten.

    Installieren von Visual Studio Express

    Installieren von Visual Studio Express

  4. Lesen Sie alle Lizenzen und Bedingungen der Produkte, und klicken Sie auf "Ich stimme zu", um den Vorgang fortzusetzen.

    Akzeptieren der Lizenzbedingungen

    Akzeptieren der Lizenzbedingungen

  5. Warten Sie, bis der Download- und Installationsprozess abgeschlossen ist.

    Installationsfortschritt

    Installationsfortschritt

  6. Wenn die Installation abgeschlossen ist, klicken Sie auf "Fertig stellen".

    Installation abgeschlossen

    Installation abgeschlossen

  7. Klicken Sie auf "Beenden ", um den Webplattform-Installer zu schließen.

  8. Um Visual Studio Express für Web zu öffnen, wechseln Sie zum Startbildschirm, und beginnen Sie mit dem Schreiben von "VS Express", und klicken Sie dann auf die VS Express für Webkachel.

    VS Express für Webkachel

    VS Express für Webkachel

Anhang B: Veröffentlichen einer ASP.NET MVC 4-Anwendung mit Web Deploy

In diesem Anhang wird gezeigt, wie Sie eine neue Website über das Windows Azure-Verwaltungsportal erstellen und die Anwendung veröffentlichen, die Sie erhalten haben, indem Sie die von Windows Azure bereitgestellte Web Deploy-Veröffentlichungsfunktion nutzen.

Aufgabe 1 – Erstellen einer neuen Website über das Windows Azure-Portal

  1. Wechseln Sie zum Windows Azure-Verwaltungsportal , und melden Sie sich mit den Microsoft-Anmeldeinformationen an, die Ihrem Abonnement zugeordnet sind.

    Hinweis

    Mit Windows Azure können Sie 10 ASP.NET Websites kostenlos hosten und dann skalieren, wenn Ihr Datenverkehr wächst. Sie können sich hier registrieren.

    Anmelden bei Windows Azure-Portal

    Anmelden beim Windows Azure-Verwaltungsportal

  2. Klicken Sie auf der Befehlsleiste auf "Neu ".

    Erstellen einer neuen Website

    Erstellen einer neuen Website

  3. Klicken Sie auf "Computewebsite | ". Wählen Sie dann die Option "Schnellerstellung " aus. Geben Sie eine verfügbare URL für die neue Website an, und klicken Sie auf " Website erstellen".

    Hinweis

    Eine Windows Azure-Website ist der Host für eine Webanwendung, die in der Cloud ausgeführt wird, die Sie steuern und verwalten können. Mit der Option "Schnellerstellung" können Sie eine fertige Webanwendung von außerhalb des Portals auf der Windows Azure-Website bereitstellen. Sie enthält keine Schritte zum Einrichten einer Datenbank.

    Erstellen einer neuen Website mithilfe der Schnellerstellung

    Erstellen einer neuen Website mithilfe der Schnellerstellung

  4. Warten Sie, bis die neue Website erstellt wird.

  5. Nachdem die Website erstellt wurde, klicken Sie auf den Link unter der URL-Spalte . Überprüfen Sie, ob die neue Website funktioniert.

    Navigieren zur neuen Website

    Navigieren zur neuen Website

    Website wird ausgeführt

    Website wird ausgeführt

  6. Wechseln Sie zurück zum Portal, und klicken Sie auf den Namen der Website unter der Spalte "Name ", um die Verwaltungsseiten anzuzeigen.

    Öffnen der Websiteverwaltungsseiten

    Öffnen der Websiteverwaltungsseiten

  7. Klicken Sie auf der Seite "Dashboard " im Abschnitt "Schnellblick " auf den Link "Veröffentlichungsprofil herunterladen".

    Hinweis

    Das Veröffentlichungsprofil enthält alle Informationen, die zum Veröffentlichen einer Webanwendung auf einer Windows Azure-Website für jede aktivierte Publikationsmethode erforderlich sind. Das Veröffentlichungsprofil enthält die URLs, Benutzeranmeldeinformationen und Datenbankzeichenfolgen, die erforderlich sind, um eine Verbindung mit jedem der Endpunkte herzustellen und zu authentifizieren, für die eine Publikationsmethode aktiviert ist. Microsoft WebMatrix 2, Microsoft Visual Studio Express für Web und Microsoft Visual Studio 2012 unterstützen das Lesen von Veröffentlichungsprofilen, um die Konfiguration dieser Programme zum Veröffentlichen von Webanwendungen auf Windows Azure-Websites zu automatisieren.

    Herunterladen des Veröffentlichungsprofils der Website

    Herunterladen des Veröffentlichungsprofils der Website

  8. Laden Sie die Veröffentlichungsprofildatei an einen bekannten Speicherort herunter. In dieser Übung erfahren Sie, wie Sie diese Datei verwenden, um eine Webanwendung in einer Windows Azure-Website aus Visual Studio zu veröffentlichen.

    Speichern der Veröffentlichungsprofildatei

    Speichern der Veröffentlichungsprofildatei

Aufgabe 2 : Konfigurieren des Datenbankservers

Wenn Ihre Anwendung SQL Server-Datenbanken verwendet, müssen Sie einen SQL-Datenbank Server erstellen. Wenn Sie eine einfache Anwendung bereitstellen möchten, die sql Server nicht verwendet, überspringen Sie diese Aufgabe möglicherweise.

  1. Sie benötigen einen SQL-Datenbank Server zum Speichern der Anwendungsdatenbank. Sie können die SQL-Datenbank Server aus Ihrem Abonnement im Windows Azure-Verwaltungsportal im Dashboard von Sql Databases | Servers anzeigen | . Wenn Sie keinen Server erstellt haben, können Sie einen mit der Schaltfläche "Hinzufügen " auf der Befehlsleiste erstellen. Notieren Sie sich den Servernamen und die URL, den Administratoranmeldungsnamen und das Kennwort, wie Sie sie in den nächsten Aufgaben verwenden werden. Erstellen Sie die Datenbank noch nicht, da sie in einer späteren Phase erstellt wird.

    SQL-Datenbank Serverdashboard

    SQL-Datenbank Serverdashboard

  2. In der nächsten Aufgabe testen Sie die Datenbankverbindung von Visual Studio, aus diesem Grund müssen Sie Ihre lokale IP-Adresse in die Liste der zulässigen IP-Adressen des Servers aufnehmen. Klicken Sie dazu auf "Konfigurieren", wählen Sie die IP-Adresse aus der aktuellen Client-IP-Adresse aus, fügen Sie sie in die Textfelder "START-IP-Adresse " und "IP-Adresse beenden" ein, und klicken Sie auf die Add-client-ip-address-ok-button Schaltfläche.

    Hinzufügen der Client-IP-Adresse

    Hinzufügen der Client-IP-Adresse

  3. Nachdem die Client-IP-Adresse der Liste zulässiger IP-Adressen hinzugefügt wurde, klicken Sie auf " Speichern ", um die Änderungen zu bestätigen.

    Änderungen bestätigen

    Änderungen bestätigen

Aufgabe 3 – Veröffentlichen einer ASP.NET MVC 4-Anwendung mithilfe von Web Deploy

  1. Wechseln Sie zurück zur ASP.NET MVC 4-Lösung. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Websiteprojekt, und wählen Sie "Veröffentlichen" aus.

    Veröffentlichen der Anwendung

    Veröffentlichen der Website

  2. Importieren Sie das Veröffentlichungsprofil, das Sie in der ersten Aufgabe gespeichert haben.

    Importieren des Veröffentlichungsprofils

    Importieren des Veröffentlichungsprofils

  3. Klicken Sie auf " Verbindung überprüfen". Klicken Sie nach Abschluss der Überprüfung auf Weiter.

    Hinweis

    Die Überprüfung ist abgeschlossen, sobald neben der Schaltfläche "Verbindung überprüfen" ein grünes Häkchen angezeigt wird.

    Überprüfen der Verbindung

    Überprüfen der Verbindung

  4. Klicken Sie auf der Seite "Einstellungen " im Abschnitt "Datenbanken " auf die Schaltfläche neben dem Textfeld ihrer Datenbankverbindung (d. h. DefaultConnection).

    Webbereitstellungskonfiguration

    Webbereitstellungskonfiguration

  5. Konfigurieren Sie die Datenbankverbindung wie folgt:

    • Geben Sie im Servernamen ihre SQL-Datenbank Server-URL mit dem Präfix tcp: ein.

    • Geben Sie unter " Benutzername" den Anmeldenamen des Serveradministrators ein.

    • Geben Sie im Kennwort das Anmeldekennwort ihres Serveradministrators ein.

    • Geben Sie einen neuen Datenbanknamen ein.

      Konfigurieren von Ziel-Verbindungszeichenfolge

      Konfigurieren von Ziel-Verbindungszeichenfolge

  6. Klicken Sie dann auf OK. Wenn Sie aufgefordert werden, die Datenbank zu erstellen, klicken Sie auf "Ja".

    Erstellen der Datenbank

    Erstellen der Datenbank

  7. Die Verbindungszeichenfolge, die Sie zum Herstellen einer Verbindung mit SQL-Datenbank in Windows Azure verwenden, wird im Textfeld "Standardverbindung" angezeigt. Klicken Sie dann auf Weiter.

    Verbindungszeichenfolge, die auf SQL-Datenbank zeigt

    Verbindungszeichenfolge, die auf SQL-Datenbank zeigt

  8. Klicken Sie auf der Seite "Vorschau " auf "Veröffentlichen".

    Veröffentlichen der Webanwendung

    Veröffentlichen der Webanwendung

  9. Sobald der Veröffentlichungsprozess abgeschlossen ist, öffnet Ihr Standardbrowser die veröffentlichte Website.

Anhang C: Verwenden von Codeausschnitten

Mit Codeausschnitten verfügen Sie über den gesamten Code, den Sie benötigen, jederzeit. Das Lab-Dokument teilt Ihnen genau mit, wann Sie sie verwenden können, wie in der folgenden Abbildung dargestellt.

Verwenden von Visual Studio-Codeausschnitten zum Einfügen von Code in Ihr Projekt

Verwenden von Visual Studio-Codeausschnitten zum Einfügen von Code in Ihr Projekt

So fügen Sie einen Codeausschnitt mithilfe der Tastatur hinzu (nur C#)

  1. Platzieren Sie den Cursor an der Stelle, an der Sie den Code einfügen möchten.
  2. Beginnen Sie mit der Eingabe des Codeausschnittnamens (ohne Leerzeichen oder Bindestriche).
  3. Sehen Sie sich an, wie IntelliSense übereinstimmende Codeausschnittnamen anzeigt.
  4. Wählen Sie den richtigen Codeausschnitt aus (oder halten Sie die Eingabe, bis der Name des gesamten Codeausschnitts ausgewählt ist).
  5. Drücken Sie zweimal die TAB-TASTE, um den Codeausschnitt an der Cursorposition einzufügen.

Beginnen Sie mit der Eingabe des Codeausschnittnamens.

Beginnen Sie mit der Eingabe des Codeausschnittnamens.

Drücken Sie die TAB-TASTE, um den hervorgehobenen Codeausschnitt auszuwählen.

Drücken Sie die TAB-TASTE, um den hervorgehobenen Codeausschnitt auszuwählen.

Drücken Sie erneut die TAB-TASTE, und der Codeausschnitt wird erweitert.

Drücken Sie erneut die TAB-TASTE, und der Codeausschnitt wird erweitert.

So fügen Sie einen Codeausschnitt mit der Maus (C#, Visual Basic und XML) 1 hinzu. Klicken Sie mit der rechten Maustaste auf die Stelle, an der Sie den Codeausschnitt einfügen möchten.

  1. Wählen Sie "Codeausschnitt einfügen" gefolgt von "Codeausschnitte" aus.
  2. Wählen Sie den relevanten Codeausschnitt aus der Liste aus, indem Sie darauf klicken.

Klicken Sie mit der rechten Maustaste auf die Stelle, an der Sie den Codeausschnitt einfügen möchten, und wählen Sie

Klicken Sie mit der rechten Maustaste auf die Stelle, an der Sie den Codeausschnitt einfügen möchten, und wählen Sie "Codeausschnitt einfügen" aus.

Wählen Sie den relevanten Codeausschnitt aus der Liste aus, indem Sie darauf klicken.

Wählen Sie den relevanten Codeausschnitt aus der Liste aus, indem Sie darauf klicken.