Вот один из способов сделать это.
Этот метод отправляет URL-адрес и параметры имя / значение в форме NameValueCollection.Метод создает сообщение Http Post на конечной точке и возвращает ответ в виде строки.
Конечно, в зависимости от того, что / почему вы делаете это и сколько раз будет вызываться этот метод, могут быть другие альтернативы.Но пока вы не предоставите больше информации о ваших конкретных потребностях, этот метод достаточно хорош.
В приведенном ниже методе используются задачи (.NET 4.0) и асинхронные методы, поэтому он будет быстрее, чем синхронный метод, подобный следующему кодусписок, если вы делаете несколько звонков в цикле, например.
static string GetWebResponse(string url, NameValueCollection parameters)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.Method = "POST";
var sb = new StringBuilder();
foreach (var key in parameters.AllKeys)
sb.Append(key + "=" + parameters[key] + "&");
sb.Length = sb.Length - 1;
byte[] requestBytes = Encoding.UTF8.GetBytes(sb.ToString());
httpWebRequest.ContentLength = requestBytes.Length;
using (var requestStream = httpWebRequest.GetRequestStream())
{
requestStream.Write(requestBytes, 0, requestBytes.Length);
requestStream.Close();
}
Task<WebResponse> responseTask = Task.Factory.FromAsync<WebResponse>(httpWebRequest.BeginGetResponse, httpWebRequest.EndGetResponse, null);
using (var responseStream = responseTask.Result.GetResponseStream())
{
var reader = new StreamReader(responseStream);
return reader.ReadToEnd();
}
}
Вы также можете использовать WebClient (это немного проще).Этот метод ожидает параметры записи в виде строки в форме
name1=value1&name2=value2&name3=value3
и т. Д.Поэтому, если вы используете этот метод, обязательно передайте ваши параметры как таковые или измените реализацию так, чтобы она соответствовала приведенному выше коду.
static string HttpPost(string url, string Parameters)
{
var req = System.Net.WebRequest.Create(url);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(Parameters);
req.ContentLength = bytes.Length;
System.IO.Stream os = req.GetRequestStream ();
os.Write (bytes, 0, bytes.Length);
os.Close ();
System.Net.WebResponse resp = req.GetResponse();
if (resp== null)
return null;
var sr = new StreamReader(resp.GetResponseStream());
return sr.ReadToEnd().Trim();
}