我如何能使一个HTTP POST请求和发送数据的主体?


当前回答

MSDN有一个样本。

using System;
using System.IO;
using System.Net;
using System.Text;

namespace Examples.System.Net
{
    public class WebRequestPostExample
    {
        public static void Main()
        {
            // Create a request using a URL that can receive a post. 
            WebRequest request = WebRequest.Create("http://www.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();
        }
    }
}

其他回答

如果需要POST JSON消息体,可以使用以下方法。假设您有一个名为m的类实例。

string jsonMessage = JsonConvert.SerializeObject(m);

// Make POST call
using (HttpClient client = new HttpClient())
{
    HttpRequestMessage requestMessage = new
    HttpRequestMessage(HttpMethod.Post, "<url here>");
    requestMessage.Content = new StringContent(jsonMessage, Encoding.UTF8, "application/json");
    HttpResponseMessage response = client.SendAsync(requestMessage).Result;
    if (response.StatusCode == System.Net.HttpStatusCode.OK)
    {
        // Do something here
    }
}

到目前为止,我找到了简单的解决方案(一行程序,没有错误检查,没有等待响应):

(new WebClient()).UploadStringAsync(new Uri(Address), dataString);‏

请谨慎使用!

如果你喜欢一个流畅的API,你可以使用Tiny.RestClient。在NuGet上可以买到。

var client = new TinyRestClient(new HttpClient(), "http://MyAPI.com/api");
// POST
var city = new City() { Name = "Paris", Country = "France" };
// With content
var response = await client.PostRequest("City", city)
                           .ExecuteAsync<bool>();

c# . net

    using System.Net.Http;
    
    private static readonly HttpClient httpClient = new HttpClient();

//POST    
    var values = new Object();
    values[0] = "Value1";
    values[2] = "Value2";
    values[n] = "ValueN";

    var content = new FormUrlEncodedContent(values);
    var response = await httpClient.PostAsync("URL", content);
    var responseString = await response.Content.ReadAsStringAsync();

    

//GET
 var response = await httpClient.GetStringAsync("URL");

当使用Windows.Web.Http命名空间时,对于POST而不是FormUrlEncodedContent,我们编写HttpFormUrlEncodedContent。同样,响应类型为HttpResponseMessage。其余的就像Evan Mulawski写的那样。