Programavimas

Mano du centai už „IHttpActionResult“ sąsajos naudojimą „WebAPI“

„Microsoft WebAPI“ jau kurį laiką buvo pasirinkimo pagrindas kuriant „RESTful“ paslaugas, galinčias veikti per HTTP. „IHttpActionResult“ sąsaja buvo pristatyta su „WebAPI 2“ versija ir suteikia kitokį būdą, kaip siųsti atsakymus iš „WebAPI“ valdiklio metodų, ir ji naudoja asinchronizavimą ir laukimą pagal numatytuosius nustatymus.

Iš esmės „IHttpActionResult“ yra „HttpResponsemessage“ gamykla. „IHttpActionResult“ sąsaja yra sistemoje „System.Web.Http“ ir sukuria asinchroniškai „HttpResponseMessage“ egzempliorių. „IHttpActionResult“ sudaro pasirinktinių įmontuotų atsakymų rinkinį, kuris apima: Gerai, „BadRequest“, „Išimtis“, „Konfliktas“, „Peradresavimas“, „Neatrastas“ ir „Neautorizuotas“.

„IHttpActionResult“ sąsajoje yra tik vienas metodas. Štai kaip atrodo ši sąsaja:

vardų sritis System.Web.Http

{

viešoji sąsaja IHttpActionResult

    {

Užduotis ExecuteAsync (CancellationToken cancellationToken);

    }

}

Galite grąžinti pasirinktinį atsakymą naudodami bet kurį iš toliau išvardytų „ApiController“ klasės pagalbininkų metodų.

Gerai

Nerastas

Išimtis

Neteisėtas

Bloga užklausa

Konfliktas

Peradresuoti

„InvalidModelState“

Pateikiamas atsakymas iš „WebAPI“ valdiklio metodų

Šiame skyriuje mes ištirsime, kaip mes galime panaudoti „IHttpActionResult“, norėdami išsiųsti atsakymus iš valdiklio metodų.

Dabar apsvarstykite šį „WebApi“ valdiklį:

viešoji klasė DefaultController: ApiController

    {

privati ​​tik skaitoma „DemoRepository“ saugykla = nauja „DemoRepository“ ();

public HttpResponseMessage Get (int id)

        {

var rezultatas = saugykla.GetData (id);

jei (rezultatas! = nulis)

grąžinti Request.CreateResponse (HttpStatusCode.OK, rezultatas);

grąžinti Request.CreateResponse (HttpStatusCode.NotFound);

        }

    }

Atkreipkite dėmesį, kad kiekvienu atveju grąžinamas tinkamas būsenos kodas, t. Y. Jei duomenų yra, HttpStatusCode.OK grąžinamas, o HttpStatusCode.NotFound grąžinamas, jei duomenų nėra.

Pažiūrėkime, kaip galima pakeisti tą patį valdiklio metodą, kad būtų pateiktas atsakymas kaip „IHttpActionResult“. Štai jūsų atnaujintas valdiklio metodo kodas. Atkreipkite dėmesį, kaip „HttpResponseMessage“ buvo pakeistas į „IHttpActionResult“.

public IHttpActionResult Get (int id)

        {

var rezultatas = saugykla.GetData (id);

jei (rezultatas == nulis)

grąžinti „NotFound“ ();

grįžti Ok (rezultatas);

        }

Žr. Aukščiau pateiktą metodą Gauti. Kodas yra daug paprastas ir platus, ir jis sugeba, kaip Http pranešimas iš tikrųjų sukonstruojamas valdiklyje. Ir čia yra dar vienas pavyzdys.

Jei norite pranešti apie sėkmę ar nesėkmę, žiūrėkite šį kodo fragmentą, kuris grąžina „HttpResponseMessage“.

public HttpResponseMessage Delete (int id)

        {

var status = saugykla. Ištrinti (id);

jei (būsena)

grąžinti naują HttpResponseMessage (HttpStatusCode.OK);

grąžinti naują HttpResponseMessage (HttpStatusCode.NotFound);

        }

Dabar pažiūrėkite, kaip tą patį veiksmo metodą galima pataisyti naudojant „IHttpActionResult“, kad kodas taptų kur kas paprastesnis ir paprastesnis.

public IHttpActionResult Delete (int id)

        {

var status = saugykla.Delete (id);

jei (būsena)

grįžti Gerai ();

grąžinti „NotFound“ ();

        }

Kurį turėčiau naudoti ir kodėl?

Taigi, ar turėtume naudoti „IHttpActionResult“ per „HttpResponseMessage“ savo „WebAPI“ valdikliuose, kai siųsime atsakymus? Štai mano atsakymas į šį klausimą. Aš visada norėčiau IHttpActionResult, o ne HttpResponseMessage, nes tai padarius, valdiklių vieneto testavimas taptų supaprastintas. Galite perkelti įprastą „Http“ atsakymų kūrimo logiką į kitas klases ir padaryti valdiklio metodus paprastus ir paprastus. Iš esmės žemo lygio informacija apie Http atsakymų kūrimą būtų apibendrinta.

Kitoje pastaboje verta paminėti, kad naudodamiesi „IHttpActionResult“ galite laikytis bendros atsakomybės principo, o veiksmo metodai gali sutelkti dėmesį į „Http“ užklausų tvarkymą, o ne į „Http“ atsakymo pranešimų sudarymą. Yra dar vienas punktas, kurį verta paminėti. Norėdami naudoti HTML palaikymą naudodami „Razor“, galite pasinaudoti „IHttpActionResult“ pranašumais. Viskas, ką jums reikia padaryti, tai sukurti pasirinktinį veiksmo rezultatą, kuris gali analizuoti skustuvo rodinius. Sukurti pasirinktinį veiksmo rezultatą yra paprasta. Jums tereikės išplėsti „IHttpActionResult“ sąsają ir įdiegti savo „ExecuteAsync“ metodo versiją.

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