Webframeworkk/ASP.NET Core/Routing: Unterschied zwischen den Versionen

Aus Dokument
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
imported>Import
Version 180
Zeile 1: Zeile 1:
''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).''
''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).''
----
----


Dieses Tutorial behandelt das Routing speziell im Kontext von ASP.NET Core MVC. Es erklärt, wie eingehende Anfragen an Controller und deren Action-Methoden weitergeleitet werden.
Dieses Tutorial behandelt das Routing speziell im Kontext von ASP.NET Core MVC. Es erklärt, wie eingehende Anfragen an Controller und deren Action-Methoden weitergeleitet werden.
Zeile 12: Zeile 11:


'''Vorteile:'''
'''Vorteile:'''
* '''Präzision:''' Routen können sehr spezifisch für einzelne Actions definiert werden.
* '''Präzision:''' Routen können sehr spezifisch für einzelne Actions definiert werden.
* '''Lesbarkeit:''' Die Zuordnung von URL zu Code ist direkt am Controller/Action ersichtlich.
* '''Lesbarkeit:''' Die Zuordnung von URL zu Code ist direkt am Controller/Action ersichtlich.
Zeile 17: Zeile 17:


'''Nachteile:'''
'''Nachteile:'''
* '''Fehlende Zentralisierung:''' Es gibt keinen einzigen Ort, an dem alle Routen der Anwendung eingesehen werden können.
* '''Fehlende Zentralisierung:''' Es gibt keinen einzigen Ort, an dem alle Routen der Anwendung eingesehen werden können.
* '''Redundanz:''' Ähnliche Routenmuster müssen oft an mehreren Stellen wiederholt werden.
* '''Redundanz:''' Ähnliche Routenmuster müssen oft an mehreren Stellen wiederholt werden.
Zeile 25: Zeile 26:
Hierbei definieren Sie ein oder mehrere globale Muster. Die Standardroute wird meist so konfiguriert:
Hierbei definieren Sie ein oder mehrere globale Muster. Die Standardroute wird meist so konfiguriert:


<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">var builder = WebApplication.CreateBuilder(args);
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddControllersWithViews();


Zeile 36: Zeile 36:
     .WithStaticAssets();
     .WithStaticAssets();


app.Run();
app.Run();</syntaxhighlight>
</syntaxhighlight>
'''Erklärung der Methoden:'''


'''Erklärung der Methoden:'''
* <code>app.MapControllers()</code>: Konfiguriert das Framework so, dass es Controller-Endpunkte erkennt und Routen basierend auf Attributen oder Konventionen zuordnet.
* <code>app.MapControllers()</code>: Konfiguriert das Framework so, dass es Controller-Endpunkte erkennt und Routen basierend auf Attributen oder Konventionen zuordnet.
* <code>.WithStaticAssets()</code>: Eine Optimierung für statische Dateien (CSS, JS), die Fingerprinting für effektives Caching nutzt (eingeführt in .NET 9).
* <code>.WithStaticAssets()</code>: Eine Optimierung für statische Dateien (CSS, JS), die Fingerprinting für effektives Caching nutzt (eingeführt in .NET 9).
Zeile 47: Zeile 46:
Attribute Routing ist flexibler und wird für REST-APIs oder komplexe URL-Strukturen bevorzugt. Bei Verwendung von MVC muss hierfür <code>app.MapControllers()</code> aufgerufen werden.
Attribute Routing ist flexibler und wird für REST-APIs oder komplexe URL-Strukturen bevorzugt. Bei Verwendung von MVC muss hierfür <code>app.MapControllers()</code> aufgerufen werden.


<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">[Route("shop")]
[Route("shop")]
public class ProductController : Controller
public class ProductController : Controller
{
{
Zeile 63: Zeile 61:
         return View(id);
         return View(id);
     }
     }
}
}</syntaxhighlight>
</syntaxhighlight>
=== Wichtige Attribute ===


=== Wichtige Attribute ===
* <code>[Route(&quot;path&quot;)]</code>: Definiert den Basispfad oder spezifischen Pfad.
* <code>[Route("path")]</code>: Definiert den Basispfad oder spezifischen Pfad.
* <code>[HttpGet]</code>, <code>[HttpPost]</code>, etc.: Schränkt die Route auf eine HTTP-Methode ein.
* <code>[HttpGet]</code>, <code>[HttpPost]</code>, etc.: Schränkt die Route auf eine HTTP-Methode ein.
* <code>[Area("Admin")]</code>: Ordnet den Controller einer Area zu.
* <code>[Area(&quot;Admin&quot;)]</code>: Ordnet den Controller einer Area zu.


== 4. Routen-Parameter und Model Binding ==
== 4. Routen-Parameter und Model Binding ==
Zeile 75: Zeile 72:
In MVC werden Routen-Parameter automatisch an die Argumente der Action-Methode gebunden (Model Binding).
In MVC werden Routen-Parameter automatisch an die Argumente der Action-Methode gebunden (Model Binding).


<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">// Route: /archive/{year}/{month}
// Route: /archive/{year}/{month}
[HttpGet("archive/{year:int}/{month:range(1,12)}")]
[HttpGet("archive/{year:int}/{month:range(1,12)}")]
public IActionResult GetArchive(int year, int month)
public IActionResult GetArchive(int year, int month)
{
{
     return Content($"Archiv für {month}/{year}");
     return Content($"Archiv für {month}/{year}");
}
}</syntaxhighlight>
</syntaxhighlight>
 
== 5. Routen-Constraints in MVC ==
== 5. Routen-Constraints in MVC ==


Zeile 89: Zeile 83:


{| class="wikitable"
{| class="wikitable"
! Constraint !! Beispiel !! Beschreibung
|-
|-
| <code>:int</code> || <code>{id:int}</code> || Muss eine Ganzzahl sein.
! Constraint
! Beispiel
! Beschreibung
|-
| <code>:int</code>
| <code>{id:int}</code>
| Muss eine Ganzzahl sein.
|-
|-
| <code>:alpha</code> || <code>{name:alpha}</code> || Nur Buchstaben.
| <code>:alpha</code>
| <code>{name:alpha}</code>
| Nur Buchstaben.
|-
|-
| <code>:regex()</code> || <code>{code:regex(^\\d{{3}}$)}</code> || Matcht regulären Ausdruck.
| <code>:regex()</code>
| <code>{code:regex(^\\d``$)}</code>
| Matcht regulären Ausdruck.
|-
|-
| <code>:minlength()</code>|| <code>{slug:minlength(5)}</code> || Mindestlänge des Strings.
| <code>:minlength()</code>
| <code>{slug:minlength(5)}</code>
| Mindestlänge des Strings.
|}
|}


Zeile 105: Zeile 110:


=== Token-Variablen ===
=== Token-Variablen ===
* <code>[controller]</code>: Wird durch den Controller-Namen ersetzt.
* <code>[controller]</code>: Wird durch den Controller-Namen ersetzt.
* <code>[action]</code>: Wird durch den Action-Namen ersetzt.
* <code>[action]</code>: Wird durch den Action-Namen ersetzt.
* <code>[area]</code>: Wird durch den Area-Namen ersetzt.
* <code>[area]</code>: Wird durch den Area-Namen ersetzt.


<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">[Route("[controller]/[action]")]
[Route("[controller]/[action]")]
public class UserController : Controller
public class UserController : Controller
{
{
Zeile 118: Zeile 123:
         return View();
         return View();
     }
     }
}
}</syntaxhighlight>
</syntaxhighlight>
 
== 7. Catch-All Parameter ==
== 7. Catch-All Parameter ==


Der Catch-All Parameter <code>*</code> erfasst alle verbleibenden URL-Segmente als einzelne Zeichenkette.
Der Catch-All Parameter <code>*</code> erfasst alle verbleibenden URL-Segmente als einzelne Zeichenkette.


<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">[HttpGet("Neuformular/{*slug}")] // URL: /Neuformular/artikel/2024/dezember
[HttpGet("Neuformular/{*slug}")] // URL: /Neuformular/artikel/2024/dezember
public IActionResult Index(string slug)
public IActionResult Index(string slug)
{
{
     // slug enthält: "artikel/2024/dezember"
     // slug enthält: "artikel/2024/dezember"
     return Content($"Slug: {slug}");
     return Content($"Slug: {slug}");
}
}</syntaxhighlight>
</syntaxhighlight>
Der Parameter <code>{*slug}</code> erfasst alle verbleibenden Pfad-Segmente nach “Neuformular/” als einzelne Zeichenkette und übergibt sie an die Action-Methode.
 
== 8. Arten von Attribute Routing ==
 
Im Attribute Routing gibt es verschiedene Möglichkeiten, Routen zu definieren:
 
* '''Einfache Routen''': Direktes Zuweisen eines Pfads an eine Action oder einen Controller.
 
<syntaxhighlight lang="csharp">    [Route("produkte/liste")]
    public IActionResult List() { ... }
    </syntaxhighlight>
* '''Mehrere Routen für eine Action''': Mehrere <code>[Route]</code>-Attribute an einer Methode.
 
<syntaxhighlight lang="csharp">    [Route("produkte")]
    [Route("produkte/index")]
    public IActionResult Index() { ... }
    </syntaxhighlight>
* '''HTTP-Methode-spezifische Attribute''': Kombination von <code>[HttpGet]</code>, <code>[HttpPost]</code> usw. mit Routen.
 
<syntaxhighlight lang="csharp">   [HttpPost("produkte/erstellen")]
    public IActionResult Create() { ... }
    </syntaxhighlight>
* '''Token-basierte Routen''': Verwendung von Platzhaltern wie <code>[controller]</code> und <code>[action]</code>.
 
<syntaxhighlight lang="csharp">    [Route("[controller]/[action]")]
    public IActionResult Edit() { ... }
    </syntaxhighlight>
* '''Routen mit Constraints''': Einschränkung von Parametern direkt im Attribut.


Der Parameter <code>{*slug}</code> erfasst alle verbleibenden Pfad-Segmente nach "Neuformular/" als einzelne Zeichenkette und übergibt sie an die Action-Methode.
<syntaxhighlight lang="csharp">   [HttpGet("produkte/{id:int}")]
    public IActionResult Details(int id) { ... }
    </syntaxhighlight>
Diese Flexibilität macht Attribute Routing besonders für komplexe oder REST-orientierte APIs attraktiv.


----
----
''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).''
''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).''

Version vom 15. Februar 2026, 15:28 Uhr

Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).


Dieses Tutorial behandelt das Routing speziell im Kontext von ASP.NET Core MVC. Es erklärt, wie eingehende Anfragen an Controller und deren Action-Methoden weitergeleitet werden.

1. Routing-Typen in MVC

In ASP.NET Core MVC gibt es zwei Hauptarten des Routings:

  1. Attribute Routing (Attribut-basiertes Routing): Definition von Routen direkt an Controllern oder Action-Methoden mithilfe von Attributen.

Vorteile:

  • Präzision: Routen können sehr spezifisch für einzelne Actions definiert werden.
  • Lesbarkeit: Die Zuordnung von URL zu Code ist direkt am Controller/Action ersichtlich.
  • Flexibilität: Einfache Handhabung von komplexen URL-Parametern und Constraints.

Nachteile:

  • Fehlende Zentralisierung: Es gibt keinen einzigen Ort, an dem alle Routen der Anwendung eingesehen werden können.
  • Redundanz: Ähnliche Routenmuster müssen oft an mehreren Stellen wiederholt werden.
  • Wartungsaufwand: Bei globalen URL-Änderungen müssen viele Attribute in verschiedenen Dateien angepasst werden.

2. Program Routing

Hierbei definieren Sie ein oder mehrere globale Muster. Die Standardroute wird meist so konfiguriert:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();

var app = builder.Build();

app.UseStaticFiles();

app.MapControllers()
    .WithStaticAssets();

app.Run();

Erklärung der Methoden:

  • app.MapControllers(): Konfiguriert das Framework so, dass es Controller-Endpunkte erkennt und Routen basierend auf Attributen oder Konventionen zuordnet.
  • .WithStaticAssets(): Eine Optimierung für statische Dateien (CSS, JS), die Fingerprinting für effektives Caching nutzt (eingeführt in .NET 9).

3. Attribute Routing

Attribute Routing ist flexibler und wird für REST-APIs oder komplexe URL-Strukturen bevorzugt. Bei Verwendung von MVC muss hierfür app.MapControllers() aufgerufen werden.

[Route("shop")]
public class ProductController : Controller
{
    [Route("")] // URL: /shop
    [Route("index")] // URL: /shop/index
    public IActionResult List() 
    {
        return View();
    }

    [HttpGet("details/{id:int}")] // URL: /shop/details/5
    public IActionResult Details(int id)
    {
        return View(id);
    }
}

Wichtige Attribute

  • [Route("path")]: Definiert den Basispfad oder spezifischen Pfad.
  • [HttpGet], [HttpPost], etc.: Schränkt die Route auf eine HTTP-Methode ein.
  • [Area("Admin")]: Ordnet den Controller einer Area zu.

4. Routen-Parameter und Model Binding

In MVC werden Routen-Parameter automatisch an die Argumente der Action-Methode gebunden (Model Binding).

// Route: /archive/{year}/{month}
[HttpGet("archive/{year:int}/{month:range(1,12)}")]
public IActionResult GetArchive(int year, int month)
{
    return Content($"Archiv für {month}/{year}");
}

5. Routen-Constraints in MVC

Constraints stellen sicher, dass eine Route nur matcht, wenn die Parameter bestimmte Kriterien erfüllen.

Constraint Beispiel Beschreibung
:int {id:int} Muss eine Ganzzahl sein.
:alpha {name:alpha} Nur Buchstaben.
:regex() {code:regex(^\\d``$)} Matcht regulären Ausdruck.
:minlength() {slug:minlength(5)} Mindestlänge des Strings.

6. Token Replacement (Platzhalter)

In Attributen können Platzhalter verwendet werden, um Redundanz zu vermeiden.

Token-Variablen

  • [controller]: Wird durch den Controller-Namen ersetzt.
  • [action]: Wird durch den Action-Namen ersetzt.
  • [area]: Wird durch den Area-Namen ersetzt.
[Route("[controller]/[action]")]
public class UserController : Controller
{
    [HttpGet] // URL: /user/profile
    public IActionResult Profile()
    {
        return View();
    }
}

7. Catch-All Parameter

Der Catch-All Parameter * erfasst alle verbleibenden URL-Segmente als einzelne Zeichenkette.

[HttpGet("Neuformular/{*slug}")] // URL: /Neuformular/artikel/2024/dezember
public IActionResult Index(string slug)
{
    // slug enthält: "artikel/2024/dezember"
    return Content($"Slug: {slug}");
}

Der Parameter {*slug} erfasst alle verbleibenden Pfad-Segmente nach “Neuformular/” als einzelne Zeichenkette und übergibt sie an die Action-Methode.

8. Arten von Attribute Routing

Im Attribute Routing gibt es verschiedene Möglichkeiten, Routen zu definieren:

  • Einfache Routen: Direktes Zuweisen eines Pfads an eine Action oder einen Controller.
    [Route("produkte/liste")]
    public IActionResult List() { ... }
  • Mehrere Routen für eine Action: Mehrere [Route]-Attribute an einer Methode.
    [Route("produkte")]
    [Route("produkte/index")]
    public IActionResult Index() { ... }
  • HTTP-Methode-spezifische Attribute: Kombination von [HttpGet], [HttpPost] usw. mit Routen.
    [HttpPost("produkte/erstellen")]
    public IActionResult Create() { ... }
  • Token-basierte Routen: Verwendung von Platzhaltern wie [controller] und [action].
    [Route("[controller]/[action]")]
    public IActionResult Edit() { ... }
  • Routen mit Constraints: Einschränkung von Parametern direkt im Attribut.
    [HttpGet("produkte/{id:int}")]
    public IActionResult Details(int id) { ... }

Diese Flexibilität macht Attribute Routing besonders für komplexe oder REST-orientierte APIs attraktiv.


Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).