2016-06-07 17 views
7

Tôi muốn POST một mảng javascript trống [] tới webAPI và để nó tạo danh sách các số nguyên trống. Tôi cũng muốn nó vì vậy nếu tôi đăng javascript null đến webAPI rằng nó gán null vào danh sách các số nguyên.Gửi mảng trống đến webapi

JS:

var intArray = []; 
$.ajax({ 
    type: 'POST', 
    url: '/api/ListOfInts', 
    data: {'' : intArray}, 
    dataType: 'json' 
}); 

C# WebAPI

[HttpPost] 
public void ListOfInts([FromBody]List<int> input) 

Vấn đề 1) Jquery từ chối để gửi dữ liệu {'' : []} như bài payload. Ngay sau khi tôi thêm nội dung nào đó vào mảng, nó hoạt động như {'' : [1,2,3]}

Bài toán 2) Passing empty js array to controller gives null Dựa trên những gì tôi đọc ngay cả khi tôi làm cho nó đăng một mảng trống, nó sẽ khởi tạo danh sách là rỗng. Các giải pháp đã thảo luận có nó để danh sách luôn được khởi tạo là trống nhưng tôi không muốn điều đó. Tôi muốn nó được null trong một số trường hợp (khi null/undefined được gửi đến nó) và khi [] được gửi nó nên khởi tạo là rỗng.

Chỉnh sửa: Xem https://www.asp.net/web-api/overview/advanced/sending-html-form-data-part-1 về lý do tại sao tôi đang sử dụng {'' : []}

+0

Các bạn đã cố gắng gửi chỉ dữ liệu: intArray? –

+0

Có, nó không hoạt động chút nào. WebAPI không biết cách xử lý nó – LearningJrDev

+0

Trong WebApi, việc phân biệt giữa rỗng và trống trong một yêu cầu có thể khó khăn. Nếu bạn đang sử dụng chúng bằng cách nào đó đặt một số loại "trạng thái" trong ứng dụng của bạn, tôi sẽ suy nghĩ lại cách bạn đang làm nó. Có thể gửi một số loại cờ hoặc thứ gì đó sẽ khởi tạo đúng danh sách của bạn trên máy chủ. – jensendp

Trả lời

1
data: {'' : intArray}, 

một tên chìa khóa trống không được phép trong JSON.

Chỉ cần gửi mảng đó.

data: intArray, 
+0

Đây là yêu cầu của webAPI khi gửi một valuetype – LearningJrDev

+0

Theo [câu hỏi và câu trả lời] (http://stackoverflow.com/q/33254385/548304), các khóa trống được cho phép. – FriendlyGuy

21

Sử dụng JSON.stringify(intArray)contentType: 'application/json' công trình cho tôi:

$.ajax({ 
    url: "/api/values", 
    method: "POST", 
    contentType: 'application/json', 
    data: JSON.stringify([]) 
}); 

enter image description here

$.ajax({ 
    url: "/api/values", 
    method: "POST", 
    contentType: 'application/json', 
    data: null 
}); 

enter image description here

$.ajax({ 
     url: "/api/values", 
     method: "POST", 
     contentType: 'application/json', 
     data: JSON.stringify([1, 2, 3]) 
}); 

enter image description here

1

1. Sử dụng JSON.stringify() để chuyển đổi đối tượng javascript thành chuỗi JSON.

2. Sử dụng contentType: 'application/json' vì đó là loại phương tiện MIME chính xác cho JSON. What is the correct JSON content type?

datatype là không cần thiết

dữ liệu: JSON.stringify (intArray), contentType: 'application/json'

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