2012-09-25 15 views
23

La richiesta di parametro è sempre nullo utilizzando l'API Web. Mi manca qualcosa con l'utilizzo di un oggetto fortemente tipizzato come parametro invece di tipi semplici come i parametri.ASP.NET MVC Web Api Ottieni non mapping QueryString al parametro Stronged Typed

URL

http://localhost:2222/api/v1/divisions?EventId=30 

azione controller

public virtual ApiDivisionsResponse Get(ApiDivisionsRequest request) 
     { 
      return _apiDivisionsService.GetDivisions(request); 
     } 

oggetto

public class ApiDivisionsRequest : ApiAuthorizedRequest 
    { 
     public ApiDivisionsRequest() 
     { 
      Page = 1; 
      PageSize = 10; 
     } 

     public int EventId { get; set; } 
     public int PageSize { get; set; } 
     public int Page { get; set; } 
     public string[] Includes { get; set; } 
    } 

risposta

47

vi invito fortemente a r Leggi il following article per capire meglio come funziona il binding dei parametri nell'API Web. Dopo averlo letto capirai che per impostazione predefinita l'API Web lega i parametri della stringa di query a tipi primitivi e richiede il contenuto del corpo a tipi complessi.

Quindi, se hai bisogno di impegnare i parametri di stringa di query per tipi complessi che si avrà bisogno di ignorare questo comportamento predefinito decorare la vostra parametro con il parametro [FromUri]:

public virtual ApiDivisionsResponse Get([FromUri] ApiDivisionsRequest request) 
{ 
    ... 
} 

E sì, sono d'accordo con voi - che è un un pasticcio: il binding dei modelli era così semplice in ASP.NET MVC e hanno creato un incubo nell'API Web. Ma una volta che sai come funziona, eviterai i trucchi.

+4

Creato un incubo non è la metà di esso. Sembra che quasi tutto ciò che tocca la troupe di ASP.Net diventi il ​​manifesto di "The Stupid, It Burns!". AjaxControlToolkit, e ora questo aborto ... – jerhewet

+1

@jerhewet Realizza che c'erano fattori di guida al momento della creazione di alcuni di questi ridondanti componenti di moduli web. La domanda dei clienti e Microsoft erano in competizione con le offerte del mondo Java. Questo grande ecosistema che abbiamo oggi potrebbe non esistere se non fosse stato per il trampolino di lancio di Web Form e di altri. –

Problemi correlati