2012-10-15 15 views
10

jestem zmaga się z „nowym” WebAPI w ASP.NET ...księgowania JSON do apicontroller

Chcę tylko pisać jakieś JSON, ale to nie jest deserializacji moich danych ... Co robię źle ?!

klasy Controller

public class UtilityController : ApiController 
    { 
     [HttpPost] 
     public string Bla(Bla bla) 
     { 
      return "bla"; 
     } 
    } 

Bla Klasa: config

public class Bla 
    { 
     public string Een { get; set; } 
     public string Twee { get; set; } 
    } 

Api:

 

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

Wysłany Data:

 

    var bla = $.parseJSON('{"Een":"UNO","Twee":"DUE"}'); 
    $.ajax({ 
    type: "POST", 
    url: "/api/utility/Bla", 
    data: {Bla : bla}, 
    dataType: "json" 
    }).done(function(msg) { 
    alert("Data Saved: " + msg); 
    }); 

Odpowiedz

22

co ja doeing źle!

Nie wysyłasz prośby JSON. Wysyłasz zapytanie na numer application/x-www-form-urlencoded.

Więc upewnij się, że wysyłasz prawdziwe JSON żądanie:

var bla = { "Een": "UNO", "Twee": "DUE"}; 
$.ajax({ 
    type: 'POST', 
    url: '/api/utility/Bla', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify(bla), 
}).done(function(msg) { 
    alert("Data Saved: " + msg); 
}); 

zauważyć, jak mam ustawić prawidłową contentType nagłówek application/json, jak użyłem metody JSON.stringify wysłać żądanie JSON i prawdziwe jak pozbyłem się bezużytecznego parametru dataType: 'json', który jQuery jest w stanie automatycznie wydedukować z nagłówka odpowiedzi Content-Type, który wysyła serwer.

+0

JSON.stringify (bla) -> works :-D –

+0

Teraz, jeśli $ .post miał tylko metodę informowania o tym, że chcesz wysłać JSON i nie tworzyć danych zakodowanych, wszystko byłoby sos. – crush

-1

można spróbować zmienić tę linię:

data: {Bla : bla}, 

do tego:

data: bla, 
+1

również zerowych tych w sterowniku, ale JS wygląda czystsze; tnx –

+1

Komentarz, brak odpowiedzi. – Puppy

0

Parametr bla może być konieczne tagiem [ModelBinder] od metody post:

[HttpPost] 
public string Bla([ModelBinder]Bla bla) 
{ 
    return "bla"; 
} 
+0

https://dl.dropbox.com/u/20077570/Clipboard01.png Wciąż nic nie ma –

+0

Naprawdę myślę, że błąd jest w deserializacji webapi ... –

Powiązane problemy