Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 27609|Risposta: 3

[WebAPI] WebAPI non può associare più parametri (SB e SB1) al contenuto della richiesta

[Copiato link]
Pubblicato su 16/08/2016 13:52:38 | | | |



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.




Precedente:.NET Oracle metodo multi-table inquiry, un metodo stupido.
Prossimo:C# utilizza la riflessione per determinare se una proprietà viene assegnata
Pubblicato su 16/08/2016 15:21:29 |
ModelBinder dovrebbe avere una classe feature per ModelBinderAttribute

Simile ai filtri
Pubblicato su 16/08/2016 15:21:44 |
Vieni a trovarci ogni giorno
Pubblicato su 16/08/2016 15:22:00 |
Dammi un po' di prestigio
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com