Übergeben von Parametern an Aktionsmethoden in ASP.NET Core MVC

ASP.NET Core ist ein plattformübergreifendes, quelloffenes, schlankes, schnelles und modulares Framework zum Erstellen leistungsstarker Webanwendungen. Es gibt verschiedene Möglichkeiten, wie Sie Parameter an Aktionsmethoden in ASP.NET Core MVC übergeben können. Sie können sie über eine URL, eine Abfragezeichenfolge, einen Anforderungsheader, einen Anforderungshauptteil oder sogar ein Formular übergeben. Dieser Artikel beschreibt all diese Möglichkeiten und veranschaulicht sie anhand von Codebeispielen.

Um mit den in diesem Artikel bereitgestellten Codebeispielen arbeiten zu können, muss Visual Studio 2019 auf Ihrem System installiert sein. Wenn Sie noch keine Kopie haben, können Sie Visual Studio 2019 hier herunterladen. 

Erstellen Sie ein ASP.NET Core MVC-Projekt in Visual Studio 2019

Lassen Sie uns zunächst ein ASP.NET Core-Projekt in Visual Studio 2019 erstellen. Angenommen, Visual Studio 2019 ist auf Ihrem System installiert, führen Sie die folgenden Schritte aus, um ein neues ASP.NET Core-Projekt in Visual Studio zu erstellen.

  1. Starten Sie die Visual Studio-IDE.
  2. Klicken Sie auf "Neues Projekt erstellen".
  3. Wählen Sie im Fenster "Neues Projekt erstellen" aus der Liste der angezeigten Vorlagen "ASP.NET Core-Webanwendung" aus.
  4. Weiter klicken.
  5. Geben Sie im Fenster "Konfigurieren Sie Ihr neues Projekt" den Namen und den Speicherort für das neue Projekt an.
  6. Aktivieren Sie optional das Kontrollkästchen "Lösung und Projekt im selben Verzeichnis platzieren", abhängig von Ihren Einstellungen.
  7. Klicken Sie auf Erstellen.
  8. Wählen Sie im nächsten Fenster "Neue ASP.NET Core-Webanwendung erstellen" .NET Core als Laufzeit und ASP.NET Core 3.1 (oder höher) aus der Dropdown-Liste oben aus.
  9. Wählen Sie als Projektvorlage „Webanwendung (Model-View-Controller)“ aus, um eine neue ASP.NET Core MVC-Anwendung zu erstellen. 
  10. Stellen Sie sicher, dass die Kontrollkästchen "Docker-Unterstützung aktivieren" und "Für HTTPS konfigurieren" deaktiviert sind, da diese Funktionen hier nicht verwendet werden.
  11. Stellen Sie sicher, dass die Authentifizierung auf "Keine Authentifizierung" eingestellt ist, da wir auch keine Authentifizierung verwenden.
  12. Klicken Sie auf Erstellen.

Wenn Sie diese Schritte ausführen, wird in Visual Studio 2019 ein neues ASP.NET Core MVC-Projekt erstellt. In den folgenden Abschnitten werden wir dieses Projekt verwenden, um die verschiedenen Methoden zum Übergeben von Parametern an Aktionsmethoden in ASP.NET Core 3.1 zu veranschaulichen.

Erstellen Sie eine AuthorRepository-Klasse in ASP.NET Core MVC

In diesem Beispiel verwenden wir eine Repository-Klasse. Die Aktionsmethoden im Controller interagieren mit den Methoden der Repository-Klasse für CRUD-Operationen. Der Einfachheit halber erstellen wir zunächst eine Modellklasse mit dem Namen Author mit minimalen Eigenschaften, wie im folgenden Code-Snippet gezeigt.

    öffentliche Klasse Autor

    {

        public int Id {get; einstellen; }}

        öffentliche Zeichenfolge Vorname {get; einstellen; }}

        öffentlicher String Nachname {get; einstellen; }}

    }}

Die AuthorRepository-Klasse enthält Methoden zum Abrufen von Instanzen der Author-Klasse aus einer generischen Liste sowie zum Hinzufügen neuer Instanzen der Author-Klasse zur generischen Liste. Die GetAuthors-Methode gibt eine Datenseite zurück, an die die Seitenzahl als Argument übergeben wird.

    öffentliche Klasse AuthorRepository

    {

        Liste Autoren = neue Liste ()

        {

            neuer Autor

            {

                Id = 1,

                Vorname = "Joydip",

                Nachname = "Kanjilal"

            },

            neuer Autor

            {

                Id = 2,

                Vorname = "Steve",

                Nachname = "Smith"

            }}

        };

        öffentlicher Autor GetAuthor (int id)

        {

            Autoren zurückgeben.FirstOrDefault (a => a.Id == id);

        }}

        öffentliche Liste GetAuthors (int pageNumber = 1)

        {

            int pageSize = 10;

            int skip = pageSize * (pageNumber - 1);

            if (Autoren.Count <pageSize)

                pageSize = Autoren.Count;

            Autoren zurückgeben

              .Skip (überspringen)

              .Take (pageSize) .ToList ();

        }}

        public bool Save (Autor Autor)

        {

            var result = autoren.Wo (a => a.Id == author.Id);

            if (Ergebnis! = null)

            {

                if (result.Count () == 0)

                {

                    Autoren.Add (Autor);

                    return true;

                }}

            }}

            falsch zurückgeben;

        }}

    }}

Übergeben Sie Parameter über die URL in ASP.NET Core MVC

Eine der einfachsten und einfachsten Möglichkeiten, Parameter an eine Aktionsmethode zu übergeben, besteht darin, sie über die URL zu übergeben. Das folgende Codeausschnitt zeigt, wie Sie Parameter in der URL übergeben können.

[HttpGet]

[Route ("Default / GetAuthor / {authorId: int}")]

public IActionResult GetAuthor (int authorId)

{

   var data = authorRepository.GetAuthor (authorId);

   return View (Daten);

}}

Die URL zum Endpunkt lautet:

GET: // localhost: 8061 / Default / GetAuthor / 1

Übergeben Sie Parameter über eine Abfragezeichenfolge in ASP.NET Core MVC

Das Übergeben von Parametern in der Abfragezeichenfolge ist eine weitere Option. Es erfordert keine Änderung der Routing-Informationen und ist daher abwärtskompatibel. Betrachten Sie das folgende Codefragment, das veranschaulicht, wie Sie Parameter über Abfragezeichenfolgen in einer Aktionsmethode übergeben können.

[HttpGet]

[Route ("Default / GetAuthors / {pageNumber: int}")]

public IActionResult GetAuthors ([FromQuery

(Name = "pageNumber")] int pageNumber = 1)

{

   var data = authorRepository.GetAuthors (pageNumber);

   return Ok (Daten);

}}

Hier ist die URL für den Zugriff auf diesen Endpunkt:

GET: // localhost: 8061 / Default / GetAuthors? PageNumber = 1

Die GetAuthors-Methode akzeptiert die Seitenzahl als Argument, das über eine Abfragezeichenfolge an sie gesendet wird. Beachten Sie, dass pageNumber ein optionaler Parameter ist. Wenn an diese Methode kein Parameter übergeben wird, wird die Seitenzahl als 1 interpretiert. Die Methode gibt die Autorendatensätze für die angegebene Seite zurück. Wenn sich in unserem Beispiel 100 Autorendatensätze im Datenspeicher befinden und die Seitenzahl 3 beträgt, gibt diese Methode die Datensätze 31 bis 40 zurück. (Beachten Sie, dass die Anzahl der Autoren pro Seite fest codiert ist AuthorRepository-Klasse.)

Übergeben Sie die Parameter über den Anforderungsheader in ASP.NET Core MVC

Der Anforderungsheader ist eine weitere Option zum Übergeben von Parametern an Ihre Aktionsmethoden. Ein häufiger Anwendungsfall hierfür ist die Weitergabe von Anmeldeinformationen oder anderen geheimen Daten über das Kabel. Das folgende Codefragment zeigt eine Aktionsmethode, die eine Kreditkartennummer als Parameter akzeptiert und true zurückgibt, wenn die Kreditkartennummer gültig ist.

[HttpGet]

[Route ("Default / IsCreditCardValid / {creditCardNumber}")]

public IActionResult IsCreditCardValid ([FromHeader] Zeichenfolge creditCardNumber)

{

   Zeichenfolge regexExpression =

   "^ (? :(? 4 [0-9] {12} (?: [0-9] {3})?) |" +

   (? 5 [1-5] [0-9] {14}) | +

   "(? 3 [47] [0-9] {13}) |) $";

   Regex regex = neuer Regex (regexExpression);

   var match = regex.Match (creditCardNumber);

   return Ok (match.Success);

}}

Der Einfachheit halber validiert die Aktionsmethode IsCreditCardValid nur Kreditkarten von Visa, MasterCard und Amex. Sie können die IsCreditCardValid-Methode erweitern, um andere Kartentypen zu überprüfen. Da die Kreditkartennummer sicher übergeben werden sollte, ist die Verwendung des Anforderungsheaders hier eine gute Wahl. Abbildung 1 zeigt, wie Sie Ihre Kreditkartennummer als Parameter über den Anforderungsheader angeben können.

Übergeben Sie die Parameter über den Anforderungshauptteil in ASP.NET Core MVC

Sie müssen häufig Parameter über den Anforderungshauptteil übergeben, wenn Sie Einfüge- oder Aktualisierungsvorgänge ausführen. Das folgende Codeausschnitt zeigt, wie Sie eine Instanz der Author-Klasse über den Hauptteil der Anforderung übergeben können.

[HttpPost]

[Route ("Standard / Einfügen")]

public IActionResult Insert ([FromBody] Autor Autor)

{

   return Ok (authorRepository.Save (author));

}}

Abbildung 2 zeigt, wie Sie die Daten angeben können, die in den Anforderungshauptteil eingefügt werden sollen.

Vollständiger Quellcode unserer DefaultController-Klasse

Der vollständige Code der DefaultController-Klasse wird unten als Referenz bereitgestellt.

 öffentliche Klasse DefaultController: Controller

    {

        privat schreibgeschützt AuthorRepository authorRepository =

        neues AuthorRepository ();

        [HttpGet]

        [Route ("Default / GetAuthor / {authorId: int}")]

        public IActionResult GetAuthor (int authorId)

        {

            var data = authorRepository.GetAuthor (authorId);

            return Ok (Daten);

        }}

        [HttpGet]

        [Route ("Default / GetAuthors / {pageNumber: int}")]

        public IActionResult GetAuthors ([FromQuery

        (Name = "pageNumber")] int pageNumber = 1)

        {

            var data = authorRepository.GetAuthors (pageNumber);

            return Ok (Daten);

        }}

        [HttpGet]

        [Route ("Default / IsCreditCardValid / {creditCardNumber}")]

        public IActionResult IsCreditCardValid

        ([FromHeader] Zeichenfolge creditCardNumber)

        {

            Zeichenfolge regexExpression =

            "^ (? :(? 4 [0-9] {12} (?: [0-9] {3})?) |" +

            (? 5 [1-5] [0-9] {14}) | +

            "(? 3 [47] [0-9] {13}) |) $";

            Regex regex = neuer Regex (regexExpression);

            var match = regex.Match (creditCardNumber);

            return Ok (match.Success);

        }}

        [HttpPost]

        [Route ("Standard / Einfügen")]

        public IActionResult Insert ([FromBody] Autor Autor)

        {

            return Ok (authorRepository.Save (author));

        }}

    }}

Schließlich können Sie Parameter auch über ein Formular übergeben. Ein Formular wird häufig verwendet, wenn Sie eine Datei hochladen möchten. In diesem Fall müssten Sie die IFormFile-Schnittstelle nutzen. 

So machen Sie mehr in ASP.NET Core:

  • Verwendung von API-Analysatoren in ASP.NET Core
  • So verwenden Sie Routendatentoken in ASP.NET Core
  • Verwendung der API-Versionierung in ASP.NET Core
  • Verwendung von Datenübertragungsobjekten in ASP.NET Core 3.1
  • Behandlung von 404-Fehlern in ASP.NET Core MVC
  • Verwendung der Abhängigkeitsinjektion in Aktionsfiltern in ASP.NET Core 3.1
  • Verwendung des Optionsmusters in ASP.NET Core
  • Verwendung des Endpunktroutings in ASP.NET Core 3.0 MVC
  • Exportieren von Daten nach Excel in ASP.NET Core 3.0
  • Verwendung von LoggerMessage in ASP.NET Core 3.0
  • So senden Sie E-Mails in ASP.NET Core
  • So protokollieren Sie Daten in SQL Server in ASP.NET Core
  • So planen Sie Jobs mit Quartz.NET in ASP.NET Core
  • So geben Sie Daten von der ASP.NET Core Web API zurück
  • So formatieren Sie Antwortdaten in ASP.NET Core
  • So verwenden Sie eine ASP.NET Core-Web-API mit RestSharp
  • So führen Sie asynchrone Vorgänge mit Dapper aus
  • Verwendung von Feature-Flags in ASP.NET Core
  • Verwendung des FromServices-Attributs in ASP.NET Core
  • So arbeiten Sie mit Cookies in ASP.NET Core
  • So arbeiten Sie mit statischen Dateien in ASP.NET Core
  • Verwendung der URL-Rewriting-Middleware in ASP.NET Core
  • Implementieren der Ratenbegrenzung in ASP.NET Core
  • So verwenden Sie Azure Application Insights in ASP.NET Core
  • Verwenden erweiterter NLog-Funktionen in ASP.NET Core
  • Behandlung von Fehlern in der ASP.NET-Web-API
  • Implementieren der globalen Ausnahmebehandlung in ASP.NET Core MVC
  • Umgang mit Nullwerten in ASP.NET Core MVC
  • Erweiterte Versionierung in der ASP.NET Core-Web-API
  • So arbeiten Sie mit Worker Services in ASP.NET Core
  • Verwendung der Datenschutz-API in ASP.NET Core
  • Verwendung der bedingten Middleware in ASP.NET Core
  • So arbeiten Sie mit dem Sitzungsstatus in ASP.NET Core
  • So schreiben Sie effiziente Controller in ASP.NET Core