2012-09-25 9 views
23

La solicitud de parámetro siempre es nula utilizando Web API. ¿Me falta algo con el uso de un objeto fuertemente tipado como parámetro en lugar de tipos simples como los parámetros?ASP.NET MVC Web Api Get Not Mapping QueryString a Strongly Typed Parámetro

Url

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

Acción controlador

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

objeto

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; } 
    } 

Respuesta

47

los invito muy fuertemente a r ead the following article para comprender mejor cómo funciona el enlace de parámetros en la API web. Después de leerlo, comprenderá que, de manera predeterminada, la API web vincula los parámetros de la cadena de consulta a los tipos primitivos y solicita el contenido del cuerpo a los tipos complejos.

Así que si usted necesita para enlazar los parámetros de cadena de consulta a tipos complejos que se necesitan para anular este comportamiento predeterminado por la decoración de su parámetro con el [FromUri] parámetro:

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

Y sí, estoy de acuerdo con usted - que es una un desastre: el enlace modelo fue muy sencillo en ASP.NET MVC y crearon una pesadilla en la API web. Pero una vez que sepa cómo funciona evitará las trampas.

+4

Creado una pesadilla no es la mitad. Parece que casi todo lo que toca la tripulación de ASP.Net se convierte en el protagonista de "The Stupid, It Burns!". AjaxControlToolkit, y ahora este aborto ... – jerhewet

+1

@jerhewet Date cuenta de que hubo factores de impulso al momento de crear algunos de estos ridículos componentes de formularios web. La demanda de los clientes y Microsoft competían con las ofertas del mundo de Java. Este gran ecosistema que tenemos hoy podría no haber existido si no fuera por los peldaños de ASP.NET Webforms y otros. –

Cuestiones relacionadas