2012-05-24 8 views
6

Ich habe nächsten ApiControllerASP.NET Web Api - Post Objekt benutzerdefinierte Aktion Controller

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

mit dem nächsten Route

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

, und ich will diesen Dienst konsumieren. Ich kann erste Methode konsumieren:

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

aber ich kann zweite Methode nicht verbrauchen. Wenn ich als nächstes tun:

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

i ohne

zusätzliche Informationen nächste Ausnahme fangen

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

Ich habe ein zwei Fragen:

  1. Welche richtige Art und Weise individuelle Objekt Service-Methode Parameter zu setzen?
  2. Wie kann ich zusätzliche Informationen über "magische" Ausnahme so erhalten?

Antwort

8

Wenn Sie beabsichtigen, eine JSON-Anfrage stellen Sie sicher, senden Sie die entsprechend Content-Type Request-Header gesetzt haben, da sonst der Server nicht weiß, wie die Anforderung und die user Parameter codiert werden, die Ihren Api Controller-Aktion nimmt null ist :

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, Mann, ich danke Ihnen und ich, was chidrens von Ihnen)) seinen Witz)) und können Sie mir einige linлs mit docs über WebAPI neben asp.net/mvc? – slavsergey

Verwandte Themen