Programmēšana

Mani divi centi par IHttpActionResult saskarnes izmantošanu WebAPI

Microsoft WebAPI jau labu laiku ir bijis izvēlēts ietvars, lai izveidotu RESTful pakalpojumus, kas var darboties, izmantojot HTTP. IHttpActionResult saskarne ir ieviesta ar WebAPI 2. versiju, un tā nodrošina atšķirīgu veidu, kā nosūtīt atbildes no WebAPI kontroliera metodēm, un tā pēc noklusējuma izmanto asinhronizāciju un gaidīšanu.

Būtībā IHttpActionResult ir HttpResponsemessage rūpnīca. IHttpActionResult saskarne ir iekļauta System.Web.Http nosaukumvietā un asinhroni izveido HttpResponseMessage instanci. IHttpActionResult satur pielāgotu iebūvētu atbilžu kolekciju, kas ietver: Labi, BadRequest, Izņēmums, Konflikti, Pāradresācija, NotFound un Neautorizēti.

IHttpActionResult saskarnē ir tikai viena metode. Lūk, kā šī saskarne izskatās:

nosaukumvieta System.Web.Http

{

publiskā saskarne IHttpActionResult

    {

Uzdevums ExecuteAsync (CancellationToken cancellationToken);

    }

}

Varat atgriezt pielāgotu atbildi, izmantojot jebkuru no tālāk uzskaitītajām ApiController klases palīgu metodēm.

Labi

Nav atrasts

Izņēmums

Neatļauts

BadRequest

Konflikts

Pāradresēt

InvalidModelState

Atgriežot atbildi no WebAPI kontroliera metodēm

Šajā sadaļā mēs izpētīsim, kā mēs varam izmantot IHttpActionResult, lai nosūtītu atbildes no kontroliera metodēm.

Tagad apsveriet šādu WebApi kontrolieri:

publiskā klase DefaultController: ApiController

    {

privāts tikai lasāms DemoRepository repository = jauns DemoRepository ();

public HttpResponseMessage Get (int id)

        {

var result = repository.GetData (id);

ja (rezultāts! = nulle)

atgriešanās Request.CreateResponse (HttpStatusCode.OK, rezultāts);

atgriezt Request.CreateResponse (HttpStatusCode.NotFound);

        }

    }

Ņemiet vērā, ka katrā gadījumā tiek atgriezts atbilstošais statusa kods, t.i., ja dati ir pieejami, tiek atgriezta HttpStatusCode.OK, bet HttpStatusCode.NotFound tiek atgriezta, ja dati nav pieejami.

Apskatīsim, kā to pašu kontroliera metodi var mainīt, lai atgrieztu atbildi kā IHttpActionResult. Šeit ir atjauninātais kontrollera metodes kods jūsu atsaucei. Ņemiet vērā, kā vietne HttpResponseMessage ir aizstāta ar IHttpActionResult.

public IHttpActionResult Get (int id)

        {

var result = repository.GetData (id);

ja (rezultāts == null)

atgriezties NotFound ();

atgriezties Ok (rezultāts);

        }

Skatiet iepriekš sniegto metodi Get. Kods ir daudz vienkāršs un vienkāršs, un tas apkopo veidu, kā kontrolierī faktiski tiek izveidots Http ziņojums. Un šeit ir vēl viens piemērs.

Skatiet šo koda fragmentu, kas atgriež HttpResponseMessage, lai ziņotu par veiksmi vai neveiksmi.

public HttpResponseMessage Delete (int id)

        {

var status = repozitorijs. Dzēst (id);

ja (statuss)

atgriezt jaunu HttpResponseMessage (HttpStatusCode.OK);

atgriezt jaunu HttpResponseMessage (HttpStatusCode.NotFound);

        }

Tagad uzziniet, kā to pašu darbības metodi var atjaunot, izmantojot IHttpActionResult, lai padarītu kodu daudz vienkāršāku un vienkāršāku.

public IHttpActionResult Dzēst (int id)

        {

var status = repozitorijs. Dzēst (id);

ja (statuss)

atgriezties Ok ();

atgriezties NotFound ();

        }

Kuru man vajadzētu lietot un kāpēc?

Tātad, vai mums vajadzētu izmantot IHttpActionResult pār HttpResponseMessage mūsu WebAPI kontrolieros, nosūtot atbildes? Lūk, mana atbilde uz šo jautājumu. Es vienmēr gribētu IHttpActionResult, nevis HttpResponseMessage, jo, to darot, kontrolieru vienības pārbaude kļūtu vienkāršota. Varat pārvietot Http atbildes izveidošanas izplatīto loģiku uz citām klasēm un padarīt jūsu kontroliera metodes vienkāršas un vienkāršas. Būtībā zemā līmeņa informācija par Http atbilžu izveidošanu būtu iekapsulēta.

Citā piezīmē ir vērts pieminēt, ka, izmantojot IHttpActionResult, varat ievērot vienotās atbildības principu, kā arī jūsu darbības metodes var koncentrēties uz Http pieprasījumu apstrādi, nevis konstruēt Http atbildes ziņojumus. Ir vēl viens pieminēšanas vērts punkts. Varat izmantot IHttpActionResult priekšrocības, lai nodrošinātu HTML atbalstu ar Razor. Viss, kas jums jādara, ir izveidot pielāgotu darbību rezultātu, kas var parsēt skuvekļu skatus. Pielāgotas darbības rezultāta izveide ir vienkārša. Jums vienkārši jāpaplašina IHttpActionResult saskarne un pēc tam jāievieš sava ExecuteAsync metodes versija.

$config[zx-auto] not found$config[zx-overlay] not found