2012-05-24 18 views
6

tengo al lado ApiControllerASP.NET Web API - puesto objeto de controlador de acción personalizada

public class ValuesController : ApiController 
{ 
    // GET /api/values 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 

    public User CreateUser(User user) 
    { 
     user.Id = 1000; 
     return user; 
    } 
} 

con el siguiente ruta

routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new { id = RouteParameter.Optional }); 

y quiero consumir este servicio. Puedo consumir primer método:

var client = new WebClient(); 
    var result = client.DownloadString(@"http://localhost:61872/api/values/get"); 

pero no puedo consumir el segundo método. Cuando lo haga a continuación:

var user = new User() { Name = "user1", Password = "pass1" }; 
    var json = Newtonsoft.Json.JsonConvert.SerializeObject(user); 
    result = client.UploadString(@"http://localhost:61872/api/values/createuser", json); 

capto siguiente excepción sin información adicional

The remote server returned an error: (500) Internal Server Error.

Tengo dos preguntas:

  1. Qué forma correcta de establecer objeto personalizado al parámetro del método de servicio?
  2. ¿Cómo puedo obtener información adicional sobre la excepción "mágica" de esta manera?

Respuesta

8

Si tiene intención de enviar una solicitud JSON asegúrese de que ha establecido la cabecera Content-Type petición apropiada, de lo contrario el servidor no sabe cómo es la solicitud que se codifica y el parámetro user que toma su acción del controlador API es nula :

using (var client = new WebClient()) 
{ 
    client.Headers[HttpRequestHeader.ContentType] = "application/json"; 
    var user = new User() { Name = "user1", Password = "pass1" }; 
    var json = Newtonsoft.Json.JsonConvert.SerializeObject(user); 
    var result = client.UploadString(@"http://localhost:61872/api/values/createuser", json); 
} 
+3

Oh, tío, gracias y que lo chidrens de usted)) su broma)) y que me puede dar algunos linлs con documentos sobre WebAPI además asp.net/mvc? – slavsergey

Cuestiones relacionadas