Freigeben über


Hinzufügen eines neuen Controllers

von Rick Anderson

Hinweis

Eine aktualisierte Version dieses Tutorials ist hier mit der neuesten Version von Visual Studio verfügbar. Im neuen Tutorial wird ASP.NET Core MVC verwendet, der viele Verbesserungen gegenüber diesem Tutorial bietet.

Dieses Tutorial vermittelt Informationen zu ASP.NET Core MVC mit Controllern und Ansichten. Razor Pages ist eine neue Alternative in ASP.NET Core, einem seitenbasierten Programmiermodell, das das Erstellen der Webbenutzeroberfläche vereinfacht und produktiver macht. Es empfiehlt sich, dass Sie sich das Tutorial der Razor Pages vor der MVC-Version ansehen. Das Tutorial zu Razor Pages:

  • Ist einfacher zu befolgen.
  • Behandelt mehr Features.
  • Ist der bevorzugte Ansatz für die Entwicklung neuer Apps.

MVC steht für model-view-controller. MVC ist ein Muster für die Entwicklung von Anwendungen, die gut entworfen, testbar und einfach zu warten sind. MVC-basierte Anwendungen enthalten:

  • M odels: Klassen, die die Daten der Anwendung darstellen und Validierungslogik verwenden, um Geschäftsregeln für diese Daten zu erzwingen.
  • V iews: Vorlagendateien, die Ihre Anwendung zum dynamischen Generieren von HTML-Antworten verwendet.
  • C-Ontroller: Klassen, die eingehende Browseranforderungen verarbeiten, Modelldaten abrufen und dann Ansichtsvorlagen angeben, die eine Antwort an den Browser zurückgeben.

Wir behandeln alle diese Konzepte in dieser Tutorialreihe und zeigen Ihnen, wie Sie sie zum Erstellen einer Anwendung verwenden.

Beginnen wir mit dem Erstellen einer Controllerklasse. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf den Ordner Controller, und klicken Sie dann auf Hinzufügen und dann auf Controller.

Screenshot: Fenster

Klicken Sie im Dialogfeld Gerüst hinzufügen auf MVC 5 Controller – Leer, und klicken Sie dann auf Hinzufügen.

Screenshot: Dialogfeld

Nennen Sie Den neuen Controller "HelloWorldController", und klicken Sie auf Hinzufügen.

Controller hinzufügen

Beachten Sie in Projektmappen-Explorer, dass eine neue Datei mit dem Namen HelloWorldController.cs und ein neuer Ordner Views\HelloWorld erstellt wurde. Der Controller ist in der IDE geöffnet.

Screenshot: geöffnete Registerkarte

Ersetzen Sie den Inhalt der Datei durch den folgenden Code.

using System.Web;
using System.Web.Mvc; 
 
namespace MvcMovie.Controllers 
{ 
    public class HelloWorldController : Controller 
    { 
        // 
        // GET: /HelloWorld/ 
 
        public string Index() 
        { 
            return "This is my <b>default</b> action..."; 
        } 
 
        // 
        // GET: /HelloWorld/Welcome/ 
 
        public string Welcome() 
        { 
            return "This is the Welcome action method..."; 
        } 
    } 
}

Die Controllermethoden geben als Beispiel eine HTML-Zeichenfolge zurück. Der Controller hat den Namen HelloWorldController , und die erste Methode heißt Index. Rufen wir sie aus einem Browser auf. Führen Sie die Anwendung aus (drücken Sie F5 oder STRG+F5). Fügen Sie im Browser "HelloWorld" an den Pfad in der Adressleiste an. (In der folgenden Abbildung ist dies z. B. http://localhost:1234/HelloWorld.) Die Seite im Browser sieht wie im folgenden Screenshot aus. In der obigen Methode hat der Code direkt eine Zeichenfolge zurückgegeben. Sie haben das System angewiesen, nur HTML-Code zurückzugeben, und das hat es getan!

Screenshot, der die Registerkarte des lokalen Hosts mit dem Text This is my default action (Die Standardaktion) im Fenster zeigt.

ASP.NET MVC ruft je nach eingehender URL verschiedene Controllerklassen (und unterschiedliche Aktionsmethoden darin) auf. Die von ASP.NET MVC verwendete Standard-URL-Routinglogik verwendet ein Format wie dieses, um zu bestimmen, welcher Code aufgerufen werden soll:

/[Controller]/[ActionName]/[Parameters]

Sie legen das Format für das Routing in der Datei App_Start/RouteConfig.cs fest.

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

Wenn Sie die Anwendung ausführen und keine URL-Segmente angeben, werden standardmäßig der "Home"-Controller und die Aktionsmethode "Index" verwendet, die im Abschnitt standard des codes oben angegeben sind.

Der erste Teil der URL bestimmt die auszuführende Controllerklasse. Daher wird /HelloWorld der HelloWorldController -Klasse zugeordnet. Der zweite Teil der URL bestimmt die Aktionsmethode für die auszuführende Klasse. Daher würde /HelloWorld/Index dazu führen, dass die Index -Methode der HelloWorldController -Klasse ausgeführt wird. Beachten Sie, dass wir nur zu /HelloWorld navigieren mussten und die Index -Methode standardmäßig verwendet wurde. Dies liegt daran, dass eine Methode namens Index die Standardmethode ist, die auf einem Controller aufgerufen wird, wenn nicht explizit angegeben wird. Der dritte Teil des URL-Segments (Parameters) ist für Routendaten. Routendaten werden später in diesem Tutorial angezeigt.

Navigieren Sie zu http://localhost:xxxx/HelloWorld/Welcome. Die Welcome-Methode wird ausgeführt und gibt die Zeichenfolge „This is the Welcome action method...“ zurück. Die MVC-Standardzuordnung ist /[Controller]/[ActionName]/[Parameters]. Bei dieser URL ist HelloWorld der Controller und Welcome die Aktionsmethode. Sie haben den Teil [Parameters] der URL noch nicht verwendet.

Screenshot: Registerkarte des lokalen Hosts mit dem Text This is the Welcome action method (Willkommen) im Fenster

Lassen Sie uns das Beispiel geringfügig ändern, sodass Sie einige Parameterinformationen von der URL an den Controller übergeben können (z. B. /HelloWorld/Welcome?name=Scott&numtimes=4). Ändern Sie die Welcome -Methode, um zwei Parameter einzuschließen, wie unten gezeigt. Beachten Sie, dass der Code das Feature für optionale C#-Parameter verwendet, um anzugeben, dass der numTimes Parameter standardmäßig auf 1 festgelegt werden soll, wenn für diesen Parameter kein Wert übergeben wird.

public string Welcome(string name, int numTimes = 1) {
     return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
}

Hinweis

Sicherheitshinweis: Der obige Code verwendet HttpUtility.HtmlEncode , um die Anwendung vor böswilligen Eingaben (insbesondere JavaScript) zu schützen. Weitere Informationen finden Sie unter Vorgehensweise: Schützen vor Skript-Exploits in einer Webanwendung durch Anwenden von HTML-Codierung auf Zeichenfolgen.

Führen Sie Ihre Anwendung aus, und navigieren Sie zur Beispiel-URL (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4). Sie können für name und numtimes in der URL verschiedene Werte ausprobieren. Das ASP.NET MVC-Modellbindungssystem ordnet die benannten Parameter aus der Abfragezeichenfolge in der Adressleiste automatisch parametern in Ihrer Methode zu.

Screenshot, der ein Browserfenster mit dem U R L-Lokalen Hostkolon 1 2 3 4 Schrägstrich Hallo Welt Schrägstrich mit dem Namen des Willkommensfragezeichens

Im obigen Beispiel wird das URL-Segment ( Parameters) nicht verwendet, die name Parameter und numTimes werden als Abfragezeichenfolgen übergeben. Mit dem Zeichen „?“ (Fragezeichen) in der obigen URL ist ein Trennzeichen, und die Abfragezeichenfolgen folgen. Das & Zeichen trennt Abfragezeichenfolgen.

Ersetzen Sie die Welcome-Methode durch den folgenden Code:

public string Welcome(string name, int ID = 1)
{
    return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);
}

Führen Sie die Anwendung aus, und geben Sie die folgende URL ein: http://localhost:xxx/HelloWorld/Welcome/1?name=Scott

Screenshot, der ein Browserfenster mit dem U R L-Lokalen Hostkolon 1 2 3 4 Schrägstrich Hallo Welt Schrägstrich

Dieses Mal stimmte das dritte URL-Segment mit dem Routenparameter ID. überein. Die Welcome Aktionsmethode enthält einen Parameter (ID), der der URL-Spezifikation in der RegisterRoutes -Methode entspricht.

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

In ASP.NET MVC-Anwendungen ist es üblicher, Parameter als Routendaten (wie oben mit der ID) zu übergeben, als sie als Abfragezeichenfolgen zu übergeben. Sie können auch eine Route hinzufügen, um sowohl die Parameter numtimes als auch in den name Parametern als Routendaten in der URL zu übergeben. Fügen Sie in der Datei App_Start\RouteConfig.cs die Route "Hello" hinzu:

public class RouteConfig
{
   public static void RegisterRoutes(RouteCollection routes)
   {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

      routes.MapRoute(
          name: "Default",
          url: "{controller}/{action}/{id}",
          defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
      );

      routes.MapRoute(
           name: "Hello",
           url: "{controller}/{action}/{name}/{id}"
       );
   }
}

Führen Sie die Anwendung aus, und navigieren Sie zu /localhost:XXX/HelloWorld/Welcome/Scott/3.

Screenshot, der ein Browserfenster mit dem U R L-Lokalen Hostkolon 1 2 3 4 schrägen Schrägstrich Hallo Welt Schrägstrich Willkommen Schrägstrich Scott Schrägstrich 3 zeigt. Der Text im Fenster lautet Hello Scott ID 3.

Bei vielen MVC-Anwendungen funktioniert die Standardroute einwandfrei. Später in diesem Tutorial erfahren Sie, wie Sie Daten mithilfe der Modellbindung übergeben, und Sie müssen die Standardroute dafür nicht ändern.

In diesen Beispielen hat der Controller den "VC"-Teil von MVC ausgeführt, d. h. die Ansicht und der Controller arbeiten. Der Controller gibt direkt HTML zurück. Normalerweise möchten Sie nicht, dass Controller HTML direkt zurückgeben, da dies für Code sehr umständlich ist. Stattdessen verwenden wir in der Regel eine separate Ansichtsvorlagendatei, um die HTML-Antwort zu generieren. Sehen wir uns als Nächstes an, wie wir dies tun können.