ASP.NET MVC-Routing – Übersicht (C#)

von Stephen Walther

In diesem Tutorial zeigt Stephen Walther, wie das ASP.NET MVC-Framework Browseranforderungen Controlleraktionen zuordnet.

In diesem Tutorial erhalten Sie eine Einführung in ein wichtiges Feature jeder ASP.NET MVC-Anwendung namens ASP.NET Routing. Das modul ASP.NET Routing ist für das Zuordnen eingehender Anforderungen zu bestimmten MVC-Controlleraktionen zuständig. Am Ende dieses Tutorials erfahren Sie, wie die Standardroutentabelle Anforderungen Controlleraktionen zuordnet.

Verwenden der Standardroutentabelle

Wenn Sie eine neue ASP.NET MVC-Anwendung erstellen, ist die Anwendung bereits für die Verwendung ASP.NET Routing konfiguriert. ASP.NET Routing wird an zwei Stellen eingerichtet.

Zunächst ist ASP.NET Routing in der Webkonfigurationsdatei (Web.config-Datei) Ihrer Anwendung aktiviert. Es gibt vier Abschnitte in der Konfigurationsdatei, die für das Routing relevant sind: der Abschnitt system.web.httpModules, der Abschnitt system.web.httpHandlers, der Abschnitt system.webserver.modules und der Abschnitt system.webserver.handlers. Achten Sie darauf, diese Abschnitte nicht zu löschen, da ohne diese Abschnitte das Routing nicht mehr funktioniert.

Zweitens, und noch wichtiger, wird eine Routingtabelle in der Datei Global.asax der Anwendung erstellt. Die Datei Global.asax ist eine spezielle Datei, die Ereignishandler für ASP.NET Anwendungslebenszyklusereignisse enthält. Die Routingtabelle wird während des Anwendungsstartereignisses erstellt.

Die Datei in Listing 1 enthält die Standarddatei Global.asax für eine ASP.NET MVC-Anwendung.

Auflistung 1 : Global.asax.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit https://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );
        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

Wenn eine MVC-Anwendung zum ersten Mal gestartet wird, wird die Application_Start()-Methode aufgerufen. Diese Methode wiederum ruft die RegisterRoutes()-Methode auf. Die RegisterRoutes()-Methode erstellt die Routingtabelle.

Die Standardroutentabelle enthält eine einzelne Route (mit dem Namen Default). Die Standardroute ordnet das erste Segment einer URL einem Controllernamen, das zweite Segment einer URL einer Controlleraktion und das dritte Segment einem Parameter namens id zu.

Angenommen, Sie geben die folgende URL in die Adressleiste Ihres Webbrowsers ein:

/Home/Index/3

Die Standardroute ordnet diese URL den folgenden Parametern zu:

  • Controller = Start

  • action = Index

  • id = 3

Wenn Sie die URL /Home/Index/3 anfordern, wird der folgende Code ausgeführt:

HomeController.Index(3)

Die Standardroute enthält Standardwerte für alle drei Parameter. Wenn Sie keinen Controller angeben, wird für den Controllerparameter standardmäßig der Wert Home verwendet. Wenn Sie keine Aktion angeben, wird der Aktionsparameter standardmäßig auf den Wert Index festgelegt. Wenn Sie schließlich keine ID angeben, wird der id-Parameter standardmäßig auf eine leere Zeichenfolge festgelegt.

Sehen wir uns einige Beispiele dafür an, wie die Standardroute URLs controller-Aktionen zuordnet. Stellen Sie sich vor, Sie geben die folgende URL in die Adressleiste Ihres Browsers ein:

/Startseite

Aufgrund der Standardwerte für den Routenparameter Default führt die Eingabe dieser URL dazu, dass die Index()-Methode der HomeController-Klasse in Listing 2 aufgerufen wird.

Eintrag 2 : HomeController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index(string id)
        {
            return View();
        }
    }
}

In Listing 2 enthält die HomeController-Klasse eine Methode namens Index(), die einen einzelnen Parameter namens Id akzeptiert. Die URL /Home bewirkt, dass die Index()-Methode mit einer leeren Zeichenfolge als Wert des Id-Parameters aufgerufen wird.

Da das MVC-Framework Controlleraktionen aufruft, stimmt die URL /Home auch mit der Index()-Methode der HomeController-Klasse in Listing 3 überein.

Listing 3 – HomeController.cs (Indexaktion ohne Parameter)

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}

Die Index()-Methode in Listing 3 akzeptiert keine Parameter. Die URL /Home bewirkt, dass diese Index()-Methode aufgerufen wird. Die URL /Home/Index/3 ruft auch diese Methode auf (die ID wird ignoriert).

Die URL /Home stimmt auch mit der Index()-Methode der HomeController-Klasse in Listing 4 überein.

Listing 4 – HomeController.cs (Indexaktion mit nullable-Parameter)

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index(int? id)
        {
            return View();
        }
    }
}

In Listing 4 verfügt die Index()-Methode über einen Integer-Parameter. Da der Parameter ein Nullable-Parameter ist (kann den Wert Null aufweisen), kann Index() aufgerufen werden, ohne einen Fehler zu auslösen.

Schließlich verursacht der Aufruf der Index()-Methode in Listing 5 mit der URL /Home eine Ausnahme, da der Id-Parameter kein Nullable-Parameter ist. Wenn Sie versuchen, die Index()-Methode aufzurufen, wird der in Abbildung 1 angezeigte Fehler angezeigt.

Auflistung 5 : HomeController.cs (Indexaktion mit Id-Parameter)

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index(int id)
        {
            return View();
        }
    }
}

Aufrufen einer Controlleraktion, die einen Parameterwert erwartet

Abbildung 01: Aufrufen einer Controlleraktion, die einen Parameterwert erwartet (Klicken, um das Bild in voller Größe anzuzeigen)

Die URL /Home/Index/3 hingegen funktioniert gut mit der Indexcontrolleraktion in Listing 5. Die Anforderung /Home/Index/3 bewirkt, dass die Index()-Methode mit einem Id-Parameter aufgerufen wird, der den Wert 3 aufweist.

Zusammenfassung

Das Ziel dieses Tutorials war es, Ihnen eine kurze Einführung in ASP.NET Routing zu bieten. Wir haben die Standardroutentabelle untersucht, die Sie mit einer neuen ASP.NET MVC-Anwendung erhalten. Sie haben erfahren, wie die Standardroute URLs controller-Aktionen zuordnet.