2012-10-15 31 views
10

Tôi đang gặp khó khăn với WebApi "mới" trong Asp.Net ...Đăng JSON lên apicontroller

Tôi chỉ muốn đăng một số Json nhưng không deserializing dữ liệu của tôi ... tôi đang làm gì sai ?!

lớp điều khiển

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

Bla Class:

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

Api config:

 

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

văn dữ liệu:

 

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

Trả lời

22

gì là tôi doeing sai!

Bạn không gửi yêu cầu JSON. Bạn đang gửi yêu cầu application/x-www-form-urlencoded.

Vì vậy, hãy chắc chắn rằng bạn đang gửi một yêu cầu JSON thực:

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

Chú ý cách tôi đã thiết lập đúng contentType tiêu đề để application/json, làm thế nào tôi đã sử dụng phương pháp JSON.stringify để gửi yêu cầu JSON sản và Tôi đã loại bỏ tham số dataType: 'json' vô ích mà jQuery hoàn toàn có khả năng tự động rút ra khỏi tiêu đề phản hồi Kiểu Nội dung mà máy chủ gửi.

+0

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

+0

Bây giờ nếu $ .post chỉ có một phương thức nói rằng bạn muốn gửi JSON và không tạo dữ liệu url được mã hóa, mọi thứ sẽ là gravy. – crush

-1

Bạn có thể thử thay đổi dòng này:

data: {Bla : bla}, 

Để này:

data: bla, 
+1

cũng null trong bộ điều khiển, nhưng JS trông sạch hơn; tnx –

+1

Nhận xét, không trả lời. – Puppy

0

Tham số bla thể cần phải được gắn thẻ với [ModelBinder] trên phương pháp bài viết của bạn:

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

https://dl.dropbox.com/u/20077570/Clipboard01.png vẫn không có gì –

+0

Tôi thực sự nghĩ rằng lỗi là trong deserialization của webapi ... –

Các vấn đề liên quan