Ohjelmointi

Ymmärrä parametrien sitominen ASP.Net Web API: ssa

ASP.Net Web API on kevyt kehys, jota voidaan käyttää RESTful HTTP -palveluiden rakentamiseen. Kun työskentelet ohjaimen menetelmien kanssa Web-sovellusliittymässä, sinun on usein välitettävä parametrit näille menetelmille. "Parametri" viittaa tässä yksinkertaisesti argumenttiin menetelmään, kun taas "parametrin sitominen" viittaa prosessiin, jossa arvot asetetaan Web-API-menetelmien parametreihin.

Huomaa, että Web-sovellusliittymä voi sitoa parametreja kahdella tavalla: mallin sidonta ja muotoilijat. Mallin sidontaa käytetään lukemaan kyselymerkkijonosta, kun taas muotoilijoita käytetään lukemiseen pyynnön rungosta. Voit myös käyttää tyyppimuuntimia, jotta Web-sovellusliittymä voi käsitellä luokkaa yksinkertaisena tyypinä ja sitoa sitten parametrin URI: sta. Tätä varten sinun on luotava mukautettu TypeConverter. Voit myös luoda mukautetun mallisideaineen ottamalla käyttöön IModelBinder-käyttöliittymän luokassa ja ottamalla sitten käyttöön BindModel-menetelmän. Lisätietoja tyyppimuuntimista ja mallisideaineista on tässä Microsoftin dokumentaatiossa.

Parametrien sitomiseksi Web-sovellusliittymä noudattaa nyt tätä sääntöä: Yksinkertaisille tyypeille Web-sovellusliittymä yrittää saada arvon URI: stä, ja monimutkaisten tyyppien kohdalla Web-sovellusliittymä yrittää saada arvon pyynnön rungosta. Yksinkertaiset tyypit viittaavat sekä .Net-alkukantatyyppeihin - int, bool, double, float ja niin edelleen - ja muihin tyyppeihin, jotka sisältävät TimeSpan, DateTime, Guid, desimaali ja merkkijono. Se sisältää myös minkä tahansa tyypin, jolle on saatavana tyyppimuunnin, joka voi muuntaa merkkijonosta. Seuraavassa osassa tutkitaan [FromBody] - ja [FromUri] -attribuutteja, joita käytetään sitomaan arvoja pyynnön rungosta ja URI: sta.

Milloin [FromBody] ja [FromUri] käytetään Web-sovellusliittymässä

Jos olet käyttänyt Web-sovellusliittymää jo jonkin aikaa, saatat olla perehtynyt [FromBody] - ja [FromUri] -määritteisiin. [FromUri] -attribuutti lisätään etuliitteeseen parametriin sen määrittämiseksi, että arvo on luettava pyynnön URI: stä, ja [FromBody] -määritettä käytetään määrittämään, että arvo on luettava pyynnön rungosta.

Kaikille primitiivisille tyypeille (int, double, float jne.) Web-sovellusliittymän ajonaika yrittää lukea arvon HTTP-pyynnön URI: sta. Monimutkaisille tyypeille (luokkojen esiintymät) Web-sovellusliittymän ajonaika yrittää lukea arvon HTTP-pyynnön rungosta media-tyyppisen muotoilijan avulla. Tämä on Web-sovellusliittymän oletuskäyttäytyminen.

Jos siis pyynnön URI: ssä on primitiivinen arvo, sinun ei tarvitse määrittää [FromUri] -attribuuttia. Vastaavasti, jos pyynnön rungossa on monimutkainen arvo, sinun ei tarvitse määrittää [FromBody] -attribuuttia. Jos kuitenkin primitiivinen tyyppi sijaitsee pyynnön rungossa tai kompleksityyppi sijaitsee pyynnön URI: ssä, sinun on määritettävä [FromBody] - tai [FromUri] -määrite. Syynä on, että olet harhautunut molemmissa tapauksissa oletuskäyttäytymisestä.

Kuinka käyttää [FromBody] ja [FromUri] Web-sovellusliittymässä

Seuraava koodinpätkä kuvaa, kuinka voit määrittää [FromBody] -määritteen perustietotyypille, joka välitetään parametrina Web-sovellusliittymämenetelmälle.

julkisen luokan SecurityController: ApiController

{

public HttpResponseMessage Post ([FromBody] int id)

    {

// Kirjoita koodi tähän

    }

}

Ja tässä on koodinpätkä, joka kuvaa, kuinka monimutkainen tyyppi voidaan siirtää parametrina Web-sovellusliittymämenetelmälle FromUri-määritteen avulla.

julkisen luokan SecurityController: ApiController

{

public HttpResponseMessage Post ([FromUri] -käyttäjä)

    {

// Kirjoita koodi tähän

    }

}

On huomattava, että käyttäjän todennustietojen, kuten käyttäjänimen ja salasanan, lähettäminen URI: n kautta ei ole hyvä käytäntö, vaikka käytät ehkä SSL: ää. Tämä johtuu siitä, että tällaiset tiedot voidaan tallentaa selainlokiin, missä ne ovat alttiita altistumiselle. Kun välitetään arkaluontoisia tietoja (käyttäjänimet, salasanat, luottokorttitiedot jne.) Pyynnön rungon kautta, on välttämätöntä käyttää [FromBody] kaikissa tapauksissa.

Huomaa, että kun käytät [FromBody] -attribuuttia samalla, kun välität parametrin Web-sovellusliittymämenetelmälle, Web-sovellusliittymän ajonaika käyttää sisällön tyypin otsikkoa hyödyntämällä oikean muotoilijan. Voit oppia lisää Web-sovellusliittymän sisällönneuvotteluista artikkelistani täältä.

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