2011-01-23 40 views
6

Tôi đang gặp phải một hành vi lạ bất thường khi BẬT một chuỗi Json đến một máy chủ web PHP. Tôi sử dụng đối tượng JsonTextWriter để tạo chuỗi Json. Sau đó tôi gửi chuỗi Json dưới dạng yêu cầu POST. Vui lòng xem nhận xét. Phản hồi HTML trong mã trả lại kết quả chính xác, nhưng khi được xem trong trình duyệt, trang web hiển thị hoặc NULL hoặc mảng (0) {}.BÀI ĐĂNG Chuỗi Json đến Tập lệnh PHP Từ xa bằng cách sử dụng Json.NET

private void HttpPost(string uri, string parameters) 
{ 
WebRequest webRequest = WebRequest.Create(uri); 
webRequest.ContentType = "application/x-www-form-urlencoded"; // <- Should this be "application/json" ? 
webRequest.Method = "POST"; 
byte[] bytes = Encoding.UTF8.GetBytes(parameters); 
string byteString = Encoding.UTF8.GetString(bytes); 
Stream os = null; 
try 
{ // Send the Post Data 
    webRequest.ContentLength = bytes.Length; 
    os = webRequest.GetRequestStream(); 
    os.Write(bytes, 0, bytes.Length);  

    Console.WriteLine(String.Format(@"{0}", byteString));  // <- This matches the Json object 
} 
catch (WebException ex) 
{ //Handle Error } 

try 
{ // Get the response 
    WebResponse webResponse = webRequest.GetResponse(); 
    if (webResponse == null) { return null; } 
    StreamReader sr = new StreamReader(webResponse.GetResponseStream()); 
    Console.WriteLine(sr.ReadToEnd().Trim());    // <- Server returns string response (full HTML page) 
} 
catch (WebException ex) 
{ //Handle Error } 
} 

mã PHP có liên quan trên máy chủ:

$json = json_encode($_POST); # Not 'standard way' 
var_dump(json_decode($json)); 

Bất kỳ lời đề nghị sẽ được đánh giá rất nhiều.

Cảm ơn

Trả lời

1

Hãy thử sử dụng "application/json" làm loại nội dung. Ngoài ra, hãy kiểm tra nhật ký yêu cầu hoặc có thể thực hiện theo dõi cổng 80 nếu bạn có thể xem những gì đang được gửi tới máy chủ trong phần yêu cầu.

Bạn cũng có thể thu hẹp phạm vi của sự cố - có phải mã C# hoặc mã PHP không tốt - bằng cách viết hàm jj ajax nhanh để gửi một số JSON tới máy chủ PHP. Sự cô lập mã PHP này từ mã C# sẽ cho bạn biết liệu PHP có hoạt động ít nhất một cách chính xác hay không. Nếu có, thì vấn đề nằm trong mã C#.

+0

Cảm ơn sự giúp đỡ của bạn. Chúng tôi đã thử một số kỹ thuật gỡ lỗi này và xác định rằng sự cố xảy ra với mã hóa POST từ C#. Ngay cả với ứng dụng/json, chúng tôi nhận được các giá trị null trong PHP. Nếu chúng ta GET chuỗi với urlencoding, nó hoạt động. – Russell

+0

@Russell - Thật tuyệt vời! Vui vì bạn đã tìm ra. Kỹ thuật tốt nhất để giải quyết vấn đề như thế này là phá vỡ từng thành phần và kiểm tra nó một cách độc lập cho đến khi bạn tìm thấy thành phần bị hỏng. – jmort253

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