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ä.