Nella WebAPI, il corpo della richiesta (HttpContent) può essere letto una sola volta, non memorizzato nella cache, e può essere letto in avanti solo in anticipo.
Per esempio:
1. Indirizzo richiesto: /?id=123&name=bob
Metodo lato server: void Action(int id, string name) // Tutti i parametri sono tipi semplici, quindi proveniranno tutti dall'url
2. Indirizzo richiesta: /?id=123&nome=bob
Metodo lato server: void Action([FromUri] int id, [FromUri] nome stringa) // Uguale a quanto sopra
void Azione (nome della stringa [FromBody]); L'attributo [FormBody] mostra che l'intero corpo viene letto come una stringa come argomento
3. Indirizzo richiesta: /?id=123
Definizione di classe:
classe pubblica Customer { // Un tipo di oggetto complesso definito stringa pubblica Nome { get; set; } public int Age { get; set; }
}
Metodo lato server: void Action(int id, Customer c) // L'id del parametro viene letto dalla stringa di query, il parametro c è una classe di oggetto cliente complessa, letta dal corpo tramite formatore
Metodo lato server: null action (Cliente c1, Cliente c2) // Errore! Più parametri sono tipi complessi e tutti cercano di leggere da un corpo, che può essere letto solo una volta
Metodo lato server: null action([FromUri] Cliente c1, Cliente c2) // Sì! A differenza dell'azione sopra, il tipo complesso C1 sarà letto dall'URL e C2 dal corpo
4. Metodo ModelBinder:
void Action([ModelBinder(MyCustomBinder)] SomeType c) // Indica che viene utilizzato uno specifico binder modello per risolvere il parametro
[ModelBinder(MyCustomBinder)] classe pubblica SomeType { } // Applica questa regola a tutti i parametri di SomeType dichiarando l'attributo [ModelBidner(MyCustomBinder)] a uno specifico tipo SomeType
void Action(SomeType c) // Poiché il tipo di c è SomeType, le caratteristiche su SomeType vengono applicate per determinare il suo legame modello
Sommario:
1. I parametri semplici predefiniti vengono passati attraverso i parametri URL, con eccezioni:
1.1 Se la route contiene il parametro id, il parametro id passa attraverso la route;
1.2 Se il parametro è contrassegnato come [FromBody], il parametro può essere un parametro semplice, e il client può passarlo tramite POST: $.ajax(url, '=value'), oppure $.ajax({url: url, data: {'': 'value'}});
2. I parametri complessi predefiniti (classi di entità personalizzate) vengono passati tramite POST, con eccezioni:
2.1 Se il valore del parametro è contrassegnato come [FromUri], il parametro può essere un parametro complesso;
3. Un parametro contrassegnato [FromBody] può apparire solo una volta, un parametro contrassegnato come [FromUri] può apparire più volte e, se il parametro contrassegnato come [FromUri] è un parametro semplice, il tag può essere rimosso. |