2012-07-31 19 views
23

Me pregunto si es posible devolver varios tipos en un solo API web. Por ejemplo, quiero que una API devuelva ambas listas de clientes y pedidos (estos dos conjuntos de datos pueden o no relacionarse entre sí?Cómo la API Web devuelve varios tipos

Respuesta

33

Para devolver varios tipos, puede envolverlos en tipo anónimo, hay dos enfoques posibles:

public HttpResponseMessage Get() 
{ 
    var listInt = new List<int>() { 1, 2 }; 
    var listString = new List<string>() { "a", "b" }; 

    return ControllerContext.Request 
     .CreateResponse(HttpStatusCode.OK, new { listInt, listString }); 
} 

O:

public object Get() 
{ 
    var listInt = new List<int>() { 1, 2 }; 
    var listString = new List<string>() { "a", "b" }; 

    return new { listInt, listString }; 
} 

Asimismo, recuerda que El serializador XML no soporta los tipos anónimos. Por lo tanto, usted tiene que asegurarse de que la solicitud debe tener encabezado:

Accept: application/json 

con el fin de aceptar el formato JSON

+2

Nota: La solicitud de aceptación debe ser application/json, ya que el serializador xml responderá con un error, sin saber qué hacer. – fionbio

0

Debe usar el serializador JsonNetFormatter, porque el serializador predeterminado-DataContractJsonSerializer no puede serializar tipos anónimos.

public HttpResponseMessage Get() 
{ 
    List<Customer> cust = GetCustomers(); 
    List<Products> prod= GetCustomers(); 
    //create an anonymous type with 2 properties 
    var returnObject = new { customers = cust, Products= prod }; 
    return new HttpResponseMessage<object>(returnObject , new[] { new JsonNetFormatter() }); 
} 

usted podría conseguir JsonNetFormatter de HERE

+0

im conseguir un error en el HttpResponseMessage (y también el JsonNetFormatter pero creo que sé por qué están allí) diciendo "El tipo no genérico 'System.Net.Http.HttpResponseMessage' no se puede usar con argumentos de tipo". ¿Algunas ideas? – Matt

+0

Este código funcionará en ASP.NET Web API beta –

Cuestiones relacionadas