So arbeiten Sie mit ActionResults in der Web-API

Die ASP.Net-Web-API ist ein kompaktes Framework zum Erstellen zustandsloser und RESTful-HTTP-Dienste. Sie können die Aktionsergebnisse in der Web-API nutzen, um Daten von den Web-API-Controller-Methoden zurückzugeben.

Anfangen

Lassen Sie uns zuerst ein Web-API-Projekt erstellen. Erstellen Sie dazu in Visual Studio 2015 ein leeres ASP.Net-Projekt und aktivieren Sie das Kontrollkästchen Web-API, wenn Sie die Projektvorlage auswählen. Speichern Sie als Nächstes das Projekt unter einem Namen.

Sie werden feststellen, dass ein leeres ASP.Net-Projekt erstellt wird. Klicken Sie mit der rechten Maustaste auf den Lösungsordner der Controller und klicken Sie auf Hinzufügen -> Controller, um einen neuen Web-API-Controller zu erstellen. Wählen Sie den "Web API 2 Controller - Leer" aus, wenn Sie im nächsten Fenster dazu aufgefordert werden. Speichern Sie den Controller unter einem Namen. Angenommen, der Name des Controllers für dieses Beispiel lautet "DefaultController".

Erstellen wir eine Entitätsklasse mit dem Namen Kontakt.

public class Contact

    {

        public int Id { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

    }

Fügen Sie als Nächstes die folgende Methode zum DefaultController hinzu.

public CustomActionResult Get()

        {

            Contact contact = new Contact();

            contact.Id = 1;

            contact.FirstName = "Joydip";

            contact.LastName = "Kanjilal";

            return new CustomActionResult(HttpStatusCode.OK, contact);

        }

Beachten Sie die Verwendung der CustomActionResult-Klasse beim Zurückgeben von Daten von der Controller-Methode. Jetzt erstellen wir eine CustomActionResult-Klasse, um sicherzustellen, dass Ihr Code kompiliert wird. Wir werden diese Klasse später implementieren.

public class CustomActionResult : IHttpActionResult

    {

        public Task ExecuteAsync(CancellationToken cancellationToken)

        {

            throw new NotImplementedException();

        }

    }

Arbeiten mit ActionResults

Ihr Web-API-Controller kann einen der folgenden Werttypen zurückgeben:

  • HttpResponseMessage: In diesem Fall würde Ihre Web-API den Rückgabewert in ein HTTP-Antwortnachrichtenobjekt konvertieren und zurückgeben.
  • IHttpActionResult: In diesem Fall konvertiert die Web-API-Laufzeit den Rückgabewert intern in ein HTTP-Antwortnachrichtenobjekt (eine HttpResponseMessage-Instanz wird asynchron erstellt) und gibt ihn zurück. Die Verwendung der IHttpActionResult-Schnittstelle (eingeführt in Web API 2) vereinfacht das Unit-Testen Ihrer Web API-Controller und schließt auch die Erstellung eines HttpResponseMessage-Objekts ein.
  • void: In diesem Fall würde Ihre Web-API eine leere HTTP-Antwort mit dem Statuscode 204 zurückgeben.
  • Andere Typen: In diesem Fall nutzt Ihre Web-API den entsprechenden Medienformatierer, um Daten von der Web-API-Controller-Methode mit einem Antwortstatuscode von 200 zu serialisieren und zurückzugeben.

Das folgende Codefragment zeigt, wie Sie return HttpResponseMessage von Ihrer Web-API-Controller-Methode verwenden können.

 [Route("contact")]

public HttpResponseMessage Get()

{

    HttpResponseMessage message = Request.CreateResponse(HttpStatusCode.OK, contact);

    return message;

}

Implementieren wir nun ein benutzerdefiniertes Aktionsergebnis, mit dem wir Daten von der von uns erstellten Web-API zurückgeben.

Erstellen eines benutzerdefinierten ActionResult

Um eine benutzerdefinierte Aktionsergebnisklasse zu erstellen, müssen Sie lediglich eine Klasse erstellen, die die IActionResult-Schnittstelle implementiert und die ExecuteAsync-Methode überschreibt.

Das folgende Codefragment zeigt, wie Sie mit Generics eine benutzerdefinierte Aktionsergebnisklasse erstellen können.

public class CustomActionResult : IHttpActionResult

    {

        private System.Net.HttpStatusCode statusCode;

        T data;

        public CustomActionResult(System.Net.HttpStatusCode statusCode, T data)

        {

            this.statusCode = statusCode;

            this.data = data;

        }

    }

Das folgende Codefragment zeigt, wie Sie das Antwortobjekt erstellen, mit den erforderlichen Daten füllen und zurückgeben können.

public HttpResponseMessage CreateResponse(System.Net.HttpStatusCode statusCode, T data)

        {

            HttpRequestMessage request = new HttpRequestMessage();            request.Properties.Add(System.Web.Http.Hosting.HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration());

            HttpResponseMessage response = request.CreateResponse(statusCode, data);

            return response;

        }

Die ExecuteAsync-Methode ruft die CreateResponse-Methode auf und übergibt ihr den Statuscode und die Daten als Parameter.

        public Task ExecuteAsync(CancellationToken cancellationToken)

        {

            return Task.FromResult(CreateResponse(this.statusCode, this.data));

        }

Konsumieren der Web-API

Um die soeben erstellte Web-API zu verwenden, können Sie eine Konsolenanwendung erstellen und anschließend das Paket "WebApiContrib.Formatting.ProtoBuf" über NuGet in Ihr Projekt importieren.

Angenommen, Sie haben den Client für die Verwendung der zuvor implementierten Web-API erstellt. Hier ist die Codeliste, die zeigt, wie Sie die Web-API verwenden können.

static void Main(string[] args)

        {

            var client = new HttpClient { BaseAddress = new Uri("//localhost:37019/") };

            HttpResponseMessage response = client.GetAsync("api/Default").Result;

            if (response.IsSuccessStatusCode)

            {

                Contact contact = response.Content.ReadAsAsync().Result;

                Console.WriteLine("Id = "+ contact.Id + " First Name: " + contact.FirstName + " Last Name: " + contact.LastName);

            }

            else

            {

                Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);

            }

            Console.ReadKey();

        }