2013-04-16 29 views
25

Tôi có một thao tác đăng cơ bản hoạt động trên một đối tượng duy nhất là RecordIem. Điều tôi muốn làm là thực hiện hành động tương tự nhưng hàng loạt bằng cách đăng một loạt các yêu cầu sử dụng cùng một định dạng.Đăng mảng đối tượng với MVC Web API

Ví dụ:

public HttpResponseMessage Post(RecordItem request) 
{ 
    var recordItems = _recorder.RecordItem(request); 
    return Request.CreateResponse(HttpStatusCode.OK, recordItems); 
} 

Và khi tôi đăng Json:

{ 
    Id : "7UP24fVkGOxSjrcclghe_mP2-po", 
    System : 1, 
    Environment : "Production" 
} 

tất cả mọi thứ hoạt động tốt. Tôi muốn gửi Json tương tự như:

{ 
    Id : "7UP24fVkGOxSjrcclghe_mP2-po", 
    System : 1, 
    Environment : "Production" 
}, 
{ 
    Id : "ClPE188H4TeD2LbQPeV_EzCsKVM", 
    System : 1, 
    Environment : "Production", 
    Label : "RestTest1" 
}, 
{ 
    Id : "SAWTMJzm-_AFqoNw70-gLeUzB4k", 
    System : 1, 
    Environment : "Production" 
} 

Và có một phương pháp tương tự như bên dưới chọn này lên:

public HttpResponseMessage Post(RecordItem[] request) 
{ 
    var recordItems = _recorder.RecordItems(request); 
    return Request.CreateResponse(HttpStatusCode.OK, recordItems); 
} 

Tôi đã cố gắng sử dụng cả [FromBody][ModelBinding] thuộc tính trên mảng và cố gắng sử dụng các loại khác nhau (Danh sách, IList, IEnumerable) nhưng không có kết quả. Khi sử dụng [FromBody] thông số yêu cầu là null và khi sử dụng [ModelBinding], danh sách sẽ trống. Tôi đã thử sử dụng cả hai và điều đó không hoạt động.

Tôi không muốn phải sử dụng để lặp lại các bài đăng đơn lẻ trong ứng dụng khách của mình.

Cảm ơn

Trả lời

19

Kể từ Post bạn hy vọng một RecordItem[], nội dung JSON của bạn trong cơ thể yêu cầu bạn phải ở trong một mảng là tốt.

gì bạn có là khá chặt chẽ - hãy thử thêm một cặp khung vuông [] xung quanh dữ liệu của bạn:

[{ 
    Id : "7UP24fVkGOxSjrcclghe_mP2-po", 
    System : 1, 
    Environment : "Production" 
}, 
{ 
    Id : "ClPE188H4TeD2LbQPeV_EzCsKVM", 
    System : 1, 
    Environment : "Production", 
    Label : "RestTest1" 
}, 
{ 
    Id : "SAWTMJzm-_AFqoNw70-gLeUzB4k", 
    System : 1, 
    Environment : "Production" 
}] 
+0

Điều đó hiệu quả. Cảm ơn :) – brimble2010

+1

Điều này vẫn đi kèm với một số 0, không chắc chắn làm thế nào/tại sao nó làm việc cho anh ta nhưng trông như thế này là từ hơn 2 năm trước ... –

1

Điều quan trọng là json của bạn có chứa tên thông số request. Một lưu ý khác: bạn phải đăng nó như một mảng.

json của bạn sẽ trông như thế này:

{ 
    "request": [ 
     { 
      "Id": "...", 
      "System": 1, 
      ... 
     }, 
     { ... } 
    ] 
} 
18

Đối với tất cả mà chỉ nhận được một mảng trống bất cứ điều gì họ cố gắng, cố gắng này:

var request = $.ajax({ 
    dataType: "json", 
    url: "/api/users", 
    method: "POST", 
    data: { '': postData} 
}); 

Dữ liệu phải là một đối tượng ẩn danh duy nhất thay vì một mảng thô.

Thông tin đã được tìm thấy here.

+0

Wow và điều này vẫn chưa được cố định, điên rồ! GET không hoạt động ... –

+0

Vẫn là một vấn đề kể từ hôm nay đối với tôi. Great fix! – cscott530

+0

các tác phẩm tương tự cho dịch vụ $ http góc cạnh – dier

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