Προγραμματισμός

Πώς να επιστρέψετε δεδομένα από το ASP.NET Core Web API

Έχουμε τρεις τρόπους για την επιστροφή δεδομένων και κωδικών κατάστασης HTTP από μια μέθοδο δράσης στο ASP.NET Core. Μπορείτε να επιστρέψετε έναν συγκεκριμένο τύπο, να επιστρέψετε μια παρουσία τύπου IActionResult ή να επιστρέψετε μια παρουσία τύπου ActionResult.

Αν και η επιστροφή ενός συγκεκριμένου τύπου είναι ο απλούστερος τρόπος, το IActionResult σάς επιτρέπει να επιστρέφετε και κωδικούς δεδομένων και HTTP και το ActionResult σάς επιτρέπει να επιστρέφετε έναν τύπο που επεκτείνει το IActionResult. Ένα ActionResult μπορεί να χρησιμοποιηθεί για την αποστολή κωδικού κατάστασης HTTP, δεδομένων ή και των δύο από μια μέθοδο δράσης.

Αυτό το άρθρο παρουσιάζει μια συζήτηση για το πώς μπορούμε να επιστρέψουμε δεδομένα στο ASP.NET Core Web API χρησιμοποιώντας κάθε έναν από αυτούς τους τύπους, με σχετικά παραδείγματα κώδικα στο C #.

Για να εργαστείτε με τα παραδείγματα κώδικα που περιγράφονται σε αυτό το άρθρο, θα πρέπει να έχετε εγκαταστήσει το Visual Studio 2019 στο σύστημά σας. Εάν δεν έχετε ήδη αντίγραφο, μπορείτε να κατεβάσετε το Visual Studio 2019 εδώ.

Δημιουργήστε ένα έργο ASP.Net Core API

Πρώτα απ 'όλα, ας δημιουργήσουμε ένα έργο ASP.NET Core στο Visual Studio. Ας υποθέσουμε ότι το Visual Studio 2019 είναι εγκατεστημένο στο σύστημά σας, ακολουθήστε τα βήματα που περιγράφονται παρακάτω για να δημιουργήσετε ένα νέο έργο ASP.NET Core στο Visual Studio.

  1. Εκκινήστε το Visual Studio IDE.
  2. Κάντε κλικ στο "Δημιουργία νέου έργου".
  3. Στο παράθυρο "Δημιουργία νέου έργου", επιλέξτε "ASP.Net Core Web Application" από τη λίστα των προτύπων που εμφανίζονται.
  4. Κάντε κλικ στο Επόμενο.
  5. Στο παράθυρο "Διαμόρφωση του νέου έργου", καθορίστε το όνομα και την τοποθεσία για το νέο έργο.
  6. Κάντε κλικ στο Δημιουργία.
  7. Στο παράθυρο "Δημιουργία νέας εφαρμογής ASP.Net Core Web" που εμφανίζεται στη συνέχεια, επιλέξτε .NET Core ως χρόνο εκτέλεσης και ASP.NET Core 2.2 (ή μεταγενέστερη έκδοση) από την αναπτυσσόμενη λίστα στην κορυφή. Θα χρησιμοποιήσω το ASP.NET Core 3.0 εδώ.
  8. Επιλέξτε "API" ως πρότυπο έργου για να δημιουργήσετε μια νέα εφαρμογή ASP.NET Core API.
  9. Βεβαιωθείτε ότι τα πλαίσια ελέγχου "Ενεργοποίηση υποστήριξης Docker" και "Διαμόρφωση για HTTPS" δεν είναι επιλεγμένα, καθώς δεν θα χρησιμοποιούμε αυτές τις δυνατότητες εδώ.
  10. Βεβαιωθείτε ότι ο Έλεγχος ταυτότητας έχει οριστεί ως "Χωρίς έλεγχο ταυτότητας", καθώς ούτε θα χρησιμοποιούμε έλεγχο ταυτότητας.
  11. Κάντε κλικ στο Δημιουργία.

Αυτό θα δημιουργήσει ένα νέο έργο ASP.NET Core API στο Visual Studio. Τώρα επιλέξτε το φάκελο Λύσεις ελεγκτών στο Παράθυρο Εξερεύνησης λύσεων και κάντε κλικ στο «Προσθήκη -> Ελεγκτής…» για να δημιουργήσετε έναν νέο ελεγκτή με το όνομα DefaultController. Θα χρησιμοποιήσουμε αυτό το έργο για να διερευνήσουμε την επιστροφή δεδομένων από μεθόδους δράσης στις επόμενες ενότητες αυτού του άρθρου.

Εάν θέλετε έναν εύκολο τρόπο να δοκιμάσετε τις μεθόδους δράσης που χρησιμοποιούμε παρακάτω, σας συνιστούμε να εκμεταλλευτείτε το Postman. Μπορείτε να κατεβάσετε ένα αντίγραφο του Ταχυδρόμου από εδώ.

Δημιουργήστε τάξεις ελεγκτή και μοντέλου στο ASP.NET Core

Δημιουργήστε έναν νέο φάκελο λύσης και ονομάστε τον ως Μοντέλα. Είναι εδώ που θα τοποθετήσετε τις τάξεις των μοντέλων σας. Η ακόλουθη λίστα κώδικα δείχνει πώς μπορείτε να δημιουργήσετε μια απλή κλάση μοντέλου με το όνομα Author.

δημόσια τάξη Συγγραφέας

    {

δημόσιο int Id {get; σειρά; }

δημόσια συμβολοσειρά FirstName {get; σειρά; }

δημόσια συμβολοσειρά LastName {get; σειρά; }

    }

Μέχρι εδώ καλά. Τώρα, αντικαταστήστε τον δημιουργημένο κώδικα της κλάσης DefaultController με την λίστα κωδικών που δίνεται παρακάτω.

χρησιμοποιώντας Microsoft.AspNetCore.Mvc;

χρησιμοποιώντας System.Collections.Generic;

namespace CoreWebAPI.Controllers

{

[Διαδρομή ("api / [ελεγκτής]")]

[ApiController]

δημόσια τάξη DefaultController: ControllerBase

    {

ιδιωτικοί συγγραφείς λιστών ανάγνωσης = νέα λίστα ();

δημόσιο DefaultController ()

        {

συγγραφείς. Προσθήκη (νέος συντάκτης ()

            {

Αναγνωριστικό = 1,

Όνομα = "Joydip",

Επώνυμο = "Kanjilal"

            });

συγγραφείς. Προσθήκη (νέος συντάκτης ()

            {

Αναγνωριστικό = 2,

Όνομα = "Steve",

Επώνυμο = "Smith"

            });

        }

[HttpGet]

δημόσια IEnumerable Get ()

        {

συγγραφείς επιστροφής;

        }

[HttpGet ("{id}", Όνομα = "Λήψη")]

δημόσια Συγγραφέας Λήψη (int id)

        {

επιστροφή συγγραφέων. Εύρεση (x => x.Id == id);

        }

    }

}

Επιστρέψτε έναν συγκεκριμένο τύπο από μια μέθοδο δράσης στο ASP.NET Core

Ο απλούστερος τρόπος για να επιστρέψετε δεδομένα από μια μέθοδο δράσης είναι να επιστρέψετε έναν συγκεκριμένο τύπο. Στην λίστα κωδικών που εμφανίζεται παραπάνω, η μέθοδος Λήψη ενέργειας επιστρέφει μια λίστα με τις παρουσίες του Συγγραφέα. Αυτές οι παρουσίες δημιουργούνται και αρχικοποιούνται στον κατασκευαστή της κλάσης DefaultController. Παρακάτω είναι και πάλι η μέθοδος δράσης για την αναφορά σας. Σημειώστε ότι επιστρέφει IEnumerable.

[HttpGet]

δημόσια IEnumerable Get ()

{

συγγραφείς επιστροφής;

}

Ξεκινώντας με το ASP.NET Core 3.0, έχετε επίσης την επιλογή επιστροφής του IAsyncEnumerable από μια μέθοδο δράσης. Ενώ το IEnumerable εκτελεί μια επαναλαμβανόμενη επανάληψη συλλογής, το IAsyncEnumerable κάνει μια ασύγχρονη επανάληψη. Έτσι, το IAsyncEnumerable είναι πιο αποτελεσματικό επειδή δεν υπάρχουν κλήσεις αποκλεισμού. (Θα συζητήσω το IAsyncEnumerable περαιτέρω σε μια μελλοντική ανάρτηση εδώ.)

Δείτε πώς μπορείτε να ξαναγράψετε την προηγούμενη μέθοδο δράσης χρησιμοποιώντας το IAsyncEnumerable.

[HttpGet]

public async IAsyncEnumerable Λήψη ()

{

var author = αναμονή GetAuthors ();

περιμένετε foreach (var συγγραφέας σε συγγραφείς)

   {

συγγραφέας απόδοσης;

   }

}

Επιστρέψτε μια παρουσία τύπου IActionResult από μια μέθοδο δράσης στον πυρήνα ASP.NET

Μπορείτε να επωφεληθείτε από τη διεπαφή IActionResult όταν θέλετε να επιστρέψετε και τους κωδικούς δεδομένων και HTTP από τη μέθοδο δράσης σας. Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορεί να επιτευχθεί αυτό.

[HttpGet]

δημόσια IActionResult Get ()

{

αν (συγγραφείς == null)

επιστροφή NotFound ("Χωρίς εγγραφές");

επιστροφή ΟΚ (συγγραφείς);

}

Η διεπαφή IActionResult υλοποιείται από τις κλάσεις OkResult, NotFoundResult, CreatedResult, NoContentResult, BadRequestResult, UnauthorizedResult και UnsupportedMediaTypeResult.

Στο προηγούμενο απόσπασμα κώδικα, οι μέθοδοι NotFound () και Ok () επιστρέφουν παρουσίες τύπου IActionResult.

Επιστρέψτε μια παρουσία τύπου ActionResult από μια μέθοδο δράσης στο ASP.NET Core

Το ActionResult εισήχθη στο ASP.NET Core 2.1. Το ActionResult είναι ένας τύπος που εφαρμόζει τη διεπαφή IActionResult. Μπορείτε να επωφεληθείτε από τον τύπο επιστροφής ActionResult για να επιστρέψετε έναν τύπο που επεκτείνει το ActionResult ή οποιονδήποτε άλλο συγκεκριμένο τύπο (όπως Συγγραφέας στο παράδειγμά μας).

Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορούμε να επιστρέψουμε το ActionResult από μια μέθοδο δράσης.

[HttpGet]

δημόσιο ActionResult Παίρνω()

{

αν (συγγραφείς == null)

επιστροφή NotFound ("Χωρίς εγγραφές");

συγγραφείς επιστροφής;

}

Όπως μπορείτε να δείτε στο προηγούμενο απόσπασμα κώδικα, δεν χρειάζεται πλέον να τυλίξετε το αντικείμενο που θα επιστραφεί στη μέθοδο Ok () - μπορείτε απλά να το επιστρέψετε ως έχει.

Ας το κάνουμε τώρα ασύγχρονο. Εξετάστε την ακόλουθη μέθοδο async, η οποία επιστρέφει τη λίστα των συγγραφέων.

ιδιωτική εργασία async GetAuthors ()

{

περιμένετε Task.Delay (100). ConfigureAwait (false);

συγγραφείς επιστροφής;

}

Μια ασύγχρονη μέθοδος πρέπει να έχει τουλάχιστον μία δήλωση αναμονής. Εάν δεν έχει δηλώσεις αναμονής, ο μεταγλωττιστής θα δημιουργήσει μια προειδοποίηση που θα δηλώνει ότι η μέθοδος θα εκτελείται ταυτόχρονα. Για να αποφύγω αυτήν την προειδοποίηση μεταγλωττιστή, περίμενα μια κλήση στη μέθοδο Task. Καθυστέρηση στο προηγούμενο απόσπασμα κώδικα.

Η ενημερωμένη μέθοδος δράσης παρατίθεται παρακάτω. Σημειώστε πώς χρησιμοποιήθηκε η λέξη-κλειδί αναμονής για να επικαλεστεί τη μέθοδο ασύγχυσης που μόλις δημιουργήσαμε.

[HttpGet]

δημόσια εργασία ασύγχρονης<>> Λήψη ()

{

var data = αναμονή GetAuthors ();

εάν (δεδομένα == null)

επιστροφή NotFound ("Χωρίς εγγραφή");

δεδομένα επιστροφής;

}

Μπορείτε επίσης να επιστρέψετε μια παρουσία ενός προσαρμοσμένου ActionResult από τη μέθοδο δράσης σας. Το μόνο που χρειάζεται να κάνετε είναι να δημιουργήσετε μια κλάση που εφαρμόζει τη διεπαφή IActionResult και εφαρμόζει τη μέθοδο ExecuteResultAsync. Θα συζητήσουμε το IActionResult και το ActionResult καθώς και τα προσαρμοσμένα μαθήματα ActionResult σε μια μελλοντική ανάρτηση εδώ.