This article has been localized into German by the community.
Die Anatomie einer MVC-Route
In diesem Tutorial haben wir bereits darüber gesprochen, wie Sie mit der grundlegenden Routing-Unterstützung dank Standard-Routing problemlos loslegen können. Es ist jedoch eine gute Idee, zu verstehen, wie Routen definiert sind, da Sie an einem bestimmten Punkt wahrscheinlich die Standard- / Sammelroute verlassen und Ihre eigene Route erstellen müssen. Lassen Sie uns vor diesem Hintergrund ein wenig darüber sprechen, wie eine Route definiert ist und wie sie aussieht.
Der wichtigste Teil einer Routing-Regel besteht darin, eine URL in eine Controller-Methode zu übersetzen. Dazu benötigen wir den URL-Pfad und den Namen des Controllers sowie die Methode. Das System muss in der Lage sein, die Regel zu identifizieren (und Sie möchten möglicherweise auch eine Erinnerung an den Zweck der Regel, wenn Sie viele davon haben). Daher müssen wir der Regel auch einen Namen geben.
Lassen Sie uns in diesem Sinne versuchen, eine sehr grundlegende Regel zu erstellen. Wie bereits erwähnt, können Regeln auf verschiedene Arten und an verschiedenen Orten definiert werden. Wir beginnen dies jedoch in der Datei Startup.cs innerhalb der Methode Configure():
app.UseMvc(routes =>
routes.MapRoute("ProductList", "Products/List/", new { controller = "Products", action = "List" })
);
Der Aufruf von MapRoute() erfordert mehrere Parameter. In diesem Fall geben wir einen Namen für die Route (den ersten Parameter), die URL-Vorlage für die Regel (den zweiten Parameter) sowie ein Objekt mit den "Standardwerten" (DefaultValues) als dritten Parameter an, der die Regel an den gewünschten Controller und die Methode auf diesem Controller weiterleitet. Mit dieser Option können wir nun die URL http://localhost/ Products/List, und die List() Methode auf dem ProductsController wird aufgerufen.
Die Routenvorlage
Im obigen Beispiel ist der interessanteste Parameter der zweite. Er definiert die Vorlage der Route und obwohl unsere Vorlage sehr einfach war, gibt es viel mehr Möglichkeiten, mit denen Sie sehr ausgefeilte und komplexe URLs unterstützen können. Zunächst können Sie den Standard-Controller und die Methode/Aktion direkt in der Vorlage wie folgt definieren:
routes.MapRoute("Default", "{controller=Home}/{action=Index}")
Dies wird im Allgemeinen als konventionelles Routing bezeichnet, da es aus mindestens zwei Teilen besteht, wobei sich der erste Teil auf die Controller-Methode und der zweite Teil auf die Aktion/Methode bezieht. Der dritte und optionale Teil ist normalerweise eine ID, mit der Sie auf eine bestimmte Entität verweisen können, die Sie anzeigen möchten, z.B.: ein bestimmtes Produkt anstelle einer Liste von Produkten und so weiter. Sie können diesen optionalen ID-Parameter auch in der Route mithilfe einer speziellen Syntax definieren. Versuchen wir ein komplexeres Beispiel für eine Route, bei der wir einige der gerade beschriebenen Techniken anwenden:
app.UseMvc(routes =>
routes.MapRoute("Products", "Products/{action=Index}/{id?}", new { controller = "Products" })
);
Die Vorlage stimmt jetzt mit URLs überein, die mit dem Wort "Produkte" beginnen. Wenn nichts anderes angegeben ist, wird standardmäßig die Index -Aktion/-Methode verwendet. Wenn dagegen eine Aktion im zweiten Teil der URL angegeben ist, wird sie verwendet. Am Ende haben wir einen optionalen ID-Parameter - die Tatsache, dass er optional ist, wird durch die Verwendung eines Fragezeichens vermerkt. Wir unterstützen jetzt die folgenden URLs:
- /Products/
- /Products/List/
- /Products/Details/32/
Der Controller für all diese Szenarien könnte folgendermaßen aussehen:
public class ProductsController : Controller
{
public IActionResult Index()
{
return Content("Product overview");
}
public IActionResult List()
{
return Content("Product list");
}
public IActionResult Details(int id)
{
return Content("Product details for #" + id);
}
}
Beachten Sie insbesondere die Details-Methoden - sie haben einen Parameter namens "id", der mit dem in der Route angegebenen Parameter übereinstimmt. Das heißt, wenn Sie die Details-URL aufrufen, wird die angehängte ID automatisch als ID-Parameter an die Details-Methode übergeben!
Wie Sie sehen können, ist das Routing-Vorlagensystem sehr flexibel und ermöglicht es Ihnen, viele verschiedene URL-Variationen zu unterstützen. Es gibt viele weitere Möglichkeiten, die wir später in diesem Lernprogramm untersuchen werden. Hoffentlich haben Ihnen diese Beispiele eine gute Vorstellung davon gegeben, wie leistungsfähig die Routing-Mechanismen in ASP.NET Core MVC sind.
Mehrere Routen
Wie bereits erwähnt, können Sie in Ihrer Anwendung natürlich mehrere Routen verwenden. Tatsächlich besteht der häufigste Ansatz darin, eine Standard- / Sammelroute zu verwenden, wie wir im vorherigen Artikel gesehen haben, diese jedoch am Ende der Routenliste beizubehalten. Warum? Da die Routing-Regeln von oben nach unten verarbeitet werden, bis eine Übereinstimmung gefunden wird, werden bei einer Übereinstimmung keine Routen mehr verarbeitet. Mit anderen Worten, Sie sollten Ihre spezifischsten Regeln oben haben und dann die weniger spezifischen Sammelrouten unten behalten. Es könnte so aussehen:
app.UseMvc(routes =>
{
routes.MapRoute("Products", "Products/{action=Index}/{id?}", new { controller = "Products" });
routes.MapRoute("Default", "{controller=Home}/{action=Index}/{id?}");
});
Beachten Sie, dass ich zuerst eine ganz bestimmte Regel (für Produkte) und am Ende die Standard-Sammelregel habe. Selbst wenn Sie keine bestimmte Route zu einer Controller- / Aktionskombination definiert haben, wird versucht, diese zu erreichen, sofern sie vorhanden ist. Wenn sie nicht vorhanden ist, wird auf die Index() Methode auf dem HomeController zurückgegriffen .
Zusammenfassung
Inzwischen sollten Sie eine bessere Vorstellung davon haben, wie das Routing funktioniert und wie Sie Ihre eigenen Routen definieren. In den nächsten Artikeln werden weitere verfügbare Optionen zum Definieren Ihrer Routen sowie andere Möglichkeiten zum Verwenden der Routing-Mechanismen von ASP.NET MVC erläutert.