Programavimas

Supraskite parametrų susiejimą ASP.Net žiniatinklio API

ASP.Net žiniatinklio API yra lengva sistema, kurią galima naudoti kuriant RESTful HTTP paslaugas. Dirbdami su valdiklio metodais žiniatinklio API, dažnai turėsite perduoti parametrus šiems metodams. „Parametras“ čia paprasčiausiai nurodo metodo argumentą, o „parametrų susiejimas“ reiškia vertybių nustatymo procesą žiniatinklio API metodų parametruose.

Atkreipkite dėmesį, kad yra du būdai, kuriais žiniatinklio API gali susieti parametrus: modelio susiejimas ir formatai. Modelio susiejimas naudojamas skaityti iš užklausos eilutės, o formatai naudojami skaityti iš užklausos turinio. Taip pat galite naudoti tipo keitiklius, kad įgalintumėte „Web API“ klasę traktuoti kaip paprastą rūšį ir tada susieti parametrą iš URI. Norėdami tai padaryti, turėsite sukurti pasirinktinį „TypeConverter“. Taip pat galite sukurti pasirinktinį modelio segtuvą, įdiegdami „IModelBinder“ sąsają savo klasėje ir tada įgyvendindami „BindModel“ metodą. Norėdami sužinoti daugiau apie tipo keitiklius ir modelių rišiklius, peržiūrėkite šiuos „Microsoft“ dokumentus.

Dabar, norėdami susieti parametrus, žiniatinklio API laikosi šios taisyklės: Paprastiems tipams žiniatinklio API bando gauti vertę iš URI, o sudėtingų tipų atveju - žiniatinklio API bando gauti vertę iš užklausos turinio. Paprasti tipai čia nurodo tiek pirminius .Net tipus - int, Bool, Double, float ir kt., Tiek kitus tipus, įskaitant „TimeSpan“, „DateTime“, „Guid“, dešimtainį ir eilutę. Tai taip pat apima bet kokį tipą, kuriam galima naudoti tipo keitiklį, kuris gali konvertuoti iš eilutės. Kitame skyriuje mes ištirsime [FromBody] ir [FromUri] atributus, naudojamus susieti atitinkamai užklausos turinio ir URI reikšmes.

Kada žiniatinklio API naudoti [FromBody] ir [FromUri]

Jei kurį laiką naudojate žiniatinklio API, jums gali būti žinomi atributai [FromBody] ir [FromUri]. Atributas [FromUri] pridedamas prie parametro, nurodant, kad reikšmė turėtų būti nuskaityta iš užklausos URI, o atributas [FromBody] naudojamas nurodyti, kad vertė turėtų būti nuskaityta iš užklausos turinio.

Visų primityvių tipų (int, double, float ir kt.) Žiniatinklio API vykdymo laikas bando nuskaityti reikšmę iš HTTP užklausos URI. Sudėtingiems tipams (klasių egzemplioriams) žiniatinklio API vykdymo laikas bando nuskaityti vertę iš HTTP užklausos turinio naudodamas laikmenos tipo formatą. Tai yra numatytoji žiniatinklio API elgsena.

Taigi, jei užklausos URI turite vertę, kuri yra primityvus tipas, jums nereikia nurodyti atributo [FromUri]. Panašiai, jei užklausos turinyje yra sudėtingo tipo vertė, nereikia nurodyti atributo [FromBody]. Tačiau jei primityvus tipas yra užklausos tekste arba kompleksinis tipas yra užklausos URI, turite nurodyti atributą [FromBody] arba [FromUri]. Priežastis ta, kad abiem atvejais nuklystate nuo numatyto elgesio.

Kaip naudoti [FromBody] ir [FromUri] žiniatinklio API

Šis kodo fragmentas parodo, kaip galite nurodyti pagrindinio duomenų tipo, perduoto kaip parametras žiniatinklio API metodui, atributą [FromBody].

viešosios klasės „SecurityController“: „ApiController“

{

public HttpResponseMessage Post ([FromBody] int id)

    {

// Čia parašykite savo kodą

    }

}

Štai kodo fragmentas, parodantis, kaip galite perduoti sudėtingą tipą kaip parametrą žiniatinklio API metodui naudodami „FromUri“ atributą.

viešosios klasės „SecurityController“: „ApiController“

{

public HttpResponseMessage Post ([FromUri] vartotojo vartotojas)

    {

// Čia parašykite savo kodą

    }

}

Reikėtų pažymėti, kad vartotojo autentifikavimo duomenų, tokių kaip vartotojo vardas ir slaptažodis, siuntimas per URI nėra gera praktika, net jei galbūt naudojate SSL. Taip yra todėl, kad tokie duomenys gali būti išsaugoti naršyklės žurnaluose, kur jie yra pažeidžiami. Perduodant bet kokius neskelbtinus duomenis (vartotojo vardus, slaptažodžius, kreditinės kortelės informaciją ir kt.) Per užklausos organą, kiekvienu atveju būtina naudoti [FromBody].

Atminkite, kad kai naudojate atributą [FromBody] perduodant parametrą žiniatinklio API metodui, žiniatinklio API vykdymo laikas naudoja turinio tipo antraštę, kad pasirinktų teisingą formatą. Daugiau apie turinio derybas žiniatinklio API galite sužinoti iš mano straipsnio čia.

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