如何使用WebRequest来发布一些数据并读取响应?

需要让服务器对API进行POST,如何将POST值添加到WebRequest对象以及如何发送它并获得响应(它将是一个字符串)?

我需要POST两个值,有时候更多,我在这些例子中看到它表示字符串postData =“要发布的字符串”; 但是我怎么让我发布的东西知道有多个表单值?

来自MSDN

// Create a request using a URL that can receive a post. WebRequest request = WebRequest.Create ("http://contoso.com/PostAccepter.aspx "); // Set the Method property of the request to POST. request.Method = "POST"; // Create POST data and convert it to a byte array. string postData = "This is a test that posts this string to a Web server."; byte[] byteArray = Encoding.UTF8.GetBytes (postData); // Set the ContentType property of the WebRequest. request.ContentType = "application/x-www-form-urlencoded"; // Set the ContentLength property of the WebRequest. request.ContentLength = byteArray.Length; // Get the request stream. Stream dataStream = request.GetRequestStream (); // Write the data to the request stream. dataStream.Write (byteArray, 0, byteArray.Length); // Close the Stream object. dataStream.Close (); // Get the response. WebResponse response = request.GetResponse (); // Display the status. Console.WriteLine (((HttpWebResponse)response).StatusDescription); // Get the stream containing content returned by the server. dataStream = response.GetResponseStream (); // Open the stream using a StreamReader for easy access. StreamReader reader = new StreamReader (dataStream); // Read the content. string responseFromServer = reader.ReadToEnd (); // Display the content. Console.WriteLine (responseFromServer); // Clean up the streams. reader.Close (); dataStream.Close (); response.Close (); 

请注意,必须以key1 = value1&key2 = value2格式发送信息

这对我有用。 我确信它可以改进,所以随时提出建议或编辑以使其更好。

 const string WEBSERVICE_URL = "http://localhost/projectname/ServiceName.svc/ServiceMethod"; //This string is untested, but I think it's ok. string jsonData = "{ \"key1\" : \"value1\", \"key2\":\"value2\" }"; try { var webRequest = System.Net.WebRequest.Create(WEBSERVICE_URL); if (webRequest != null) { webRequest.Method = "POST"; webRequest.Timeout = 20000; webRequest.ContentType = "application/json"; using (System.IO.Stream s = webRequest.GetRequestStream()) { using (System.IO.StreamWriter sw = new System.IO.StreamWriter(s)) sw.Write(jsonData); } using (System.IO.Stream s = webRequest.GetResponse().GetResponseStream()) { using (System.IO.StreamReader sr = new System.IO.StreamReader(s)) { var jsonResponse = sr.ReadToEnd(); System.Diagnostics.Debug.WriteLine(String.Format("Response: {0}", jsonResponse)); } } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); } 

这是使用HttpWebRequest和HttpWebResponse对象发布到Web服务的示例。

 StringBuilder sb = new StringBuilder(); string query = "?q=" + latitude + "%2C" + longitude + "&format=xml&key=xxxxxxxxxxxxxxxxxxxxxxxx"; string weatherservice = "http://api.worldweatheronline.com/free/v1/marine.ashx" + query; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(weatherservice); request.Referer = "http://www.yourdomain.com"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream stream = response.GetResponseStream(); StreamReader reader = new StreamReader(stream); Char[] readBuffer = new Char[256]; int count = reader.Read(readBuffer, 0, 256); while (count > 0) { String output = new String(readBuffer, 0, count); sb.Append(output); count = reader.Read(readBuffer, 0, 256); } string xml = sb.ToString(); 

可以在此处找到更强大,更灵活的示例: C#文件上传,包含表单字段,cookie和标题

下面是从文本文件中读取数据并将其发送到处理程序以进行处理并从处理程序接收响应数据并读取它并将数据存储在字符串构建器类中的代码

  //Get the data from text file that needs to be sent. FileStream fileStream = new FileStream(@"G:\Papertest.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite); byte[] buffer = new byte[fileStream.Length]; int count = fileStream.Read(buffer, 0, buffer.Length); //This is a handler would recieve the data and process it and sends back response. WebRequest myWebRequest = WebRequest.Create(@"http://localhost/Provider/ProcessorHandler.ashx"); myWebRequest.ContentLength = buffer.Length; myWebRequest.ContentType = "application/octet-stream"; myWebRequest.Method = "POST"; // get the stream object that holds request stream. Stream stream = myWebRequest.GetRequestStream(); stream.Write(buffer, 0, buffer.Length); stream.Close(); //Sends a web request and wait for response. try { WebResponse webResponse = myWebRequest.GetResponse(); //get Stream Data from the response Stream respData = webResponse.GetResponseStream(); //read the response from stream. StreamReader streamReader = new StreamReader(respData); string name; StringBuilder str = new StringBuilder(); while ((name = streamReader.ReadLine()) != null) { str.Append(name); // Add to stringbuider when response contains multple lines data } } catch (Exception ex) { throw ex; }