2008-09-18 48 views
34

Tôi đang viết một công cụ nhỏ trong C#, sẽ cần gửi và nhận dữ liệu đến/từ một trang web sử dụng định dạng POST và json. Tôi đã không bao giờ làm bất cứ điều gì như thế này trước khi trong C# (hoặc bất kỳ ngôn ngữ thực sự) vì vậy tôi đang đấu tranh để tìm thấy một số thông tin hữu ích để giúp tôi bắt đầu.WebRequest Quyền C# Công cụ tương tác với trang web?

Tôi đã tìm thấy một số thông tin về lớp WebRequest trong C# (cụ thể là từ here) nhưng trước khi bắt đầu tìm hiểu, tôi tự hỏi đây có phải là công cụ thích hợp cho công việc hay không.

Tôi đã tìm thấy nhiều công cụ để chuyển đổi dữ liệu thành định dạng json nhưng không nhiều, vì vậy mọi thông tin sẽ thực sự hữu ích ở đây trong trường hợp tôi kết thúc một kết thúc chết.

Trả lời

25

WebYêu cầu và cụ thể hơn lớp HttpWebRequest là điểm khởi đầu tốt cho những gì bạn muốn đạt được. Để tạo yêu cầu, bạn sẽ sử dụng WebRequest.Create và truyền yêu cầu đã tạo tới một HttpWebRequest để thực sự sử dụng nó.Sau đó bạn sẽ tạo ra dữ liệu bài viết của bạn và gửi nó vào dòng như:

HttpWebRequest req = (HttpWebRequest) 
WebRequest.Create("http://mysite.com/index.php"); 
req.Method = "POST"; 
req.ContentType = "application/x-www-form-urlencoded"; 
string postData = "var=value1&var2=value2"; 
req.ContentLength = postData.Length; 

StreamWriter stOut = new 
StreamWriter(req.GetRequestStream(), 
System.Text.Encoding.ASCII); 
stOut.Write(postData); 
stOut.Close(); 

Tương tự, bạn có thể đọc các phản ứng trở lại bằng cách sử dụng phương pháp GetResponse mà sẽ cho phép bạn đọc những dòng trả lời kết quả và làm bất cứ điều gì khác mà bạn cần làm. Bạn có thể tìm thêm thông tin về các lớp học tại địa chỉ:

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx

+1

Có dấu chấm phẩy bị thiếu sau: string postData = "var = value1 & var2 = value2" –

0

Tôi đã sử dụng WebRequest để tương tác với trang web. Đó là 'công cụ' phù hợp

Tôi không thể nhận xét về khía cạnh JSON của câu hỏi của bạn.

18

WebClient là đôi khi dễ dàng hơn để sử dụng hơn WebRequest. Bạn có thể muốn xem xét nó.

Đối với việc deserialization JSON, bạn sẽ muốn xem lớp JavaScriptSerializer.

WebClient dụ:

using (WebClient client = new WebClient()) 
{ 
    //manipulate request headers (optional) 
    client.Headers.Add (HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 

    //execute request and read response as string to console 
    using (StreamReader reader = new StreamReader(client.OpenRead(targetUri))) 
    { 
     string s = reader.ReadToEnd(); 
     Console.WriteLine (s); 
    } 
} 

đánh dấu như wiki trong trường hợp ai đó muốn cập nhật mã

1

Khi nói đến việc gửi bài dữ liệu vào một trang web, System.Net.HttpWebRequest (thi HTTP cụ thể của WebRequest) là một giải pháp hoàn hảo. Nó hỗ trợ SSL, yêu cầu không đồng bộ và một loạt các tính năng khác, và được ghi chép đầy đủ trên MSDN.

Tải trọng có thể là bất kỳ thứ gì: dữ liệu ở định dạng JSON hoặc bất cứ điều gì - miễn là bạn đặt thuộc tính ContentType thành thứ gì đó mà máy chủ mong đợi và hiểu (rất có thể ứng dụng/json, text/json hoặc text/x-json) , tất cả rồi sẽ ổn thôi.

Một vấn đề tiềm năng khi sử dụng HttpWebRequest từ dịch vụ hệ thống: vì nó sử dụng proxy và thông tin xác thực của IE, hành vi mặc định có thể hơi lạ khi chạy như người dùng LOCALSYSTEM (hoặc về cơ bản bất kỳ tài khoản nào không đăng nhập tương tác một cách thường xuyên). Đặt các thuộc tính Proxy và Authentication thành Nothing (hoặc, như bạn C# folks thích gọi nó là, null, tôi đoán) nên tránh điều đó.

0

Để chuyển đổi từ đối tượng dụ để định dạng json chuỗi và ngược lại, hãy thử Json.NET: http://json.codeplex.com/

Tôi hiện đang sử dụng nó cho một dự án và thật dễ dàng để tìm hiểu và làm việc với và cung cấp một số tính linh hoạt về việc chuyển đổi hàng loạt và tùy chỉnh loại. Nó cũng hỗ trợ cú pháp LINQ để truy vấn đầu vào json.

0

Câu trả lời được đánh giá cao nhất hiện tại là hữu ích, nhưng nó không gửi hoặc nhận JSON.

Dưới đây là một ví dụ sử dụng JSON cho cả việc gửi và nhận:

How to post json object in web service

Và đây là câu hỏi StackOverflow đó đã giúp tôi nhất để giải quyết vấn đề này:

Problems sending and receiving JSON between ASP.net web service and ASP.Net web client

Và đây là một câu hỏi khác có liên quan:

json call with C#

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