Programmering

Sådan arbejder du med ActionResults i Web API

ASP.Net Web API er en letvægtsramme, der bruges til at opbygge statsløse og RESTful HTTP-tjenester. Du kan drage fordel af handlingsresultater i Web API til at returnere data fra Web API-controller-metoderne.

Kom godt i gang

Lad os først oprette et Web API-projekt. For at gøre dette skal du oprette et tomt ASP.Net-projekt i Visual Studio 2015 og markere afkrydsningsfeltet Web API, når du vælger projektskabelonen. Gem derefter projektet med et navn.

Du bemærker, at der oprettes et tomt ASP.Net-projekt. Højreklik på mappen Controllers-løsning, og klik på Tilføj -> Controller for at oprette en ny Web API-controller. Vælg "Web API 2-controller - tom", når du bliver bedt om det i det vindue, der vises. Gem controlleren med et navn. Lad os antage, at navnet på controlleren til dette eksempel er "DefaultController".

Lad os oprette en enhedsklasse ved navn Kontakt.

offentlig klasse Kontakt

    {

public int Id {get; sæt; }

offentlig streng Fornavn {get; sæt; }

public string LastName {get; sæt; }

    }

Føj derefter følgende metode til DefaultController.

offentlig CustomActionResult Get ()

        {

Kontaktkontakt = ny kontakt ();

contact.Id = 1;

contact.FirstName = "Joydip";

contact.LastName = "Kanjilal";

returner nyt CustomActionResult (HttpStatusCode.OK, kontakt);

        }

Bemærk brugen af ​​klassen CustomActionResult, mens du returnerer data fra controller-metoden. Lad os nu oprette en CustomActionResult-klasse bare for at sikre, at din kode kompileres - vi implementerer denne klasse senere.

offentlig klasse CustomActionResult: IHttpActionResult

    {

offentlig opgave ExecuteAsync (CancellationToken cancellationToken)

        {

smid ny NotImplementedException ();

        }

    }

Arbejde med ActionResults

Din Web API-controller kan returnere en af ​​følgende værdityper:

  • HttpResponseMessage: i dette tilfælde konverterer din Web API returværdien til et Http-svarsmeddelelsesobjekt og returnerer det.
  • IHttpActionResult: i dette tilfælde konverterer Web API-runtime returværdien til et Http-svarsmeddelelsesobjekt (en HttpResponseMessage-forekomst oprettes asynkront) internt og returnerer den. Brug af IHttpActionResult-grænsefladen (introduceret i Web API 2) forenkler enhedstestning af dine Web API-controllere og ombryder også oprettelsen af ​​et HttpResponseMessage-objekt.
  • ugyldigt: i dette tilfælde vil din Web API returnere et tomt Http-svar med en statuskode på 204.
  • Andre typer: i dette tilfælde vil din Web API udnytte den passende medieformatering til at serieisere og returnere data fra Web API-controller-metoden med en svarstatuskode på 200.

Følgende kodestykke viser, hvordan du kan bruge return HttpResponseMessage fra din Web API-controller-metode.

[Rute ("kontakt")]

offentlig HttpResponseMessage Get ()

{

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

returnere besked;

}

Lad os nu implementere et brugerdefineret handlingsresultat, som vi bruger til at returnere data fra den web-API, vi oprettede.

Oprettelse af et brugerdefineret ActionResult

For at oprette en tilpasset handlingsresultatklasse er alt hvad du skal gøre, at oprette en klasse, der implementerer IActionResult-grænsefladen og tilsidesætter ExecuteAsync-metoden.

Følgende kodestykke viser, hvordan du kan bruge Generics til at oprette en tilpasset handlingsresultatklasse.

offentlig klasse CustomActionResult: IHttpActionResult

    {

privat System.Net.HttpStatusCode statusCode;

T-data;

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

        {

this.statusCode = statusCode;

denne data = data;

        }

    }

Følgende kodestykke viser, hvordan du kan oprette responsobjektet, udfylde det med de nødvendige data og returnere det.

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

        {

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

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

tilbagevenden svar

        }

Metoden ExecuteAsync kalder CreateResponse-metoden og sender statuskoden og dataene til den som parameter.

        offentlig opgave ExecuteAsync (CancellationToken cancellationToken)

        {

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

        }

Forbruger Web API

For at forbruge den web-API, du lige har oprettet, kan du oprette en konsolapplikation og derefter importere "WebApiContrib.Formatting.ProtoBuf" -pakken til dit projekt via NuGet.

Forudsat at du har oprettet klienten til at forbruge Web API, vi implementerede tidligere, er her kodelisten, der viser, hvordan du kan forbruge Web Api.

statisk ugyldigt Main (streng [] args)

        {

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

HttpResponseMessage respons = client.GetAsync ("api / standard"). Resultat;

hvis (respons.IsSuccessStatusCode)

            {

Kontaktkontakt = respons.Content.ReadAsAsync (). Resultat;

Console.WriteLine ("Id =" + contact.Id + "Fornavn:" + contact.FirstName + "Efternavn:" + contact.LastName);

            }

andet

            {

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

            }

Console.ReadKey ();

        }