Canonical
Как я могу сделать HTTP-запрос и отправить некоторые данные, используяPOST
метод?
Я могу сделать GET
запрос, но я не знаю, как сделать POST
запрос.
источник
Canonical
Как я могу сделать HTTP-запрос и отправить некоторые данные, используяPOST
метод?
Я могу сделать GET
запрос, но я не знаю, как сделать POST
запрос.
Есть несколько способов выполнить HTTP GET
и POST
запросы:
Доступно в: .NET Framework 4.5+
, .NET Standard 1.1+
, .NET Core 1.0+
.
В настоящее время это предпочтительный подход, он асинхронный и высокопроизводительный. В большинстве случаев используйте встроенную версию, но для очень старых платформ есть пакет NuGet .
using System.Net.Http;
Рекомендуется создать его экземпляр на весь HttpClient
срок службы вашего приложения и поделиться им, если у вас нет особых причин не делать этого.
private static readonly HttpClient client = new HttpClient();
Смотрите HttpClientFactory
для решения инъекции зависимости .
POST
var values = new Dictionary<string, string>
{
{ "thing1", "hello" },
{ "thing2", "world" }
};
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content);
var responseString = await response.Content.ReadAsStringAsync();
GET
var responseString = await client.GetStringAsync("http://www.example.com/recepticle.aspx");
POST
var client = new RestClient("http://example.com");
// client.Authenticator = new HttpBasicAuthenticator(username, password);
var request = new RestRequest("resource/{id}");
request.AddParameter("thing1", "Hello");
request.AddParameter("thing2", "world");
request.AddHeader("header", "value");
request.AddFile("file", path);
var response = client.Post(request);
var content = response.Content; // Raw content as string
var response2 = client.Post<Person>(request);
var name = response2.Data.Name;
Это более новая библиотека, которая свободно использует API, тестирует помощников, использует HttpClient под капотом и является переносимой. Это доступно через NuGet .
using Flurl.Http;
POST
var responseString = await "http://www.example.com/recepticle.aspx"
.PostUrlEncodedAsync(new { thing1 = "hello", thing2 = "world" })
.ReceiveString();
GET
var responseString = await "http://www.example.com/recepticle.aspx"
.GetStringAsync();
Доступно в: .NET Framework 1.1+
, .NET Standard 2.0+
, .NET Core 1.0+
. В .NET Core это главным образом для совместимости - это обертывание HttpClient
, менее производительное и не получит новые функции.
using System.Net;
using System.Text; // For class Encoding
using System.IO; // For StreamReader
POST
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
var postData = "thing1=" + Uri.EscapeDataString("hello");
postData += "&thing2=" + Uri.EscapeDataString("world");
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
GET
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
Это обертка вокруг HttpWebRequest
. Сравните сHttpClient
.
Доступно в: .NET Framework 1.1+
, NET Standard 2.0+
,.NET Core 2.0+
using System.Net;
using System.Collections.Specialized;
POST
using (var client = new WebClient())
{
var values = new NameValueCollection();
values["thing1"] = "hello";
values["thing2"] = "world";
var response = client.UploadValues("http://www.example.com/recepticle.aspx", values);
var responseString = Encoding.Default.GetString(response);
}
GET
using (var client = new WebClient())
{
var responseString = client.DownloadString("http://www.example.com/recepticle.aspx");
}
HttpWebResponse response = (HttpWebResponse)HttpWReq.GetResponse();
response.Result.Content.ReadAsStringAsync()
Простой запрос GET
Простой POST-запрос
источник
У MSDN есть образец.
источник
Это полный рабочий пример отправки / получения данных в формате JSON, я использовал Visual Studio 2013 Express Edition:
источник
Здесь есть несколько действительно хороших ответов. Позвольте мне опубликовать другой способ установки заголовков с помощью WebClient (). Я также покажу вам, как установить ключ API.
источник
В этом решении используются только стандартные вызовы .NET.
Проверено:
Ссылка:
Код:
Для вызова без параметров (используется «GET» за кадром):
Для вызова с параметрами (используется «POST» за кулисами):
источник
Простое (однострочное, без проверки ошибок, без ожидания ответа) решение, которое я нашел до сих пор:
Используйте с осторожностью!
источник
При использовании пространства имен Windows.Web.Http для POST вместо FormUrlEncodedContent мы пишем HttpFormUrlEncodedContent. Также ответ является типом HttpResponseMessage. Остальное как записал Эван Мулавски.
источник
Если вам нравится свободный API, вы можете использовать Tiny.RestClient . Это доступно в NuGet .
источник
Почему это не совсем тривиально? Выполнение запроса не является и, особенно, не связано с результатами, и, похоже, также присутствуют некоторые ошибки .NET - см. Ошибка в HttpClient.GetAsync должен вызывать WebException, а не TaskCanceledException
Я закончил с этим кодом:
Это будет делать GET или POST в зависимости от того,
postBuffer
является ли ноль или нетесли успех верен, то ответ будет в
ResponseAsString
если успех является ложным , вы можете проверить
WebExceptionStatus
,HttpStatusCode
иResponseAsString
попытаться увидеть , что пошло не так.источник
В ядре .net вы можете выполнять пост-вызов с помощью следующего кода, здесь я добавил некоторые дополнительные функции к этому коду, чтобы ваш код мог работать за прокси-сервером и с сетевыми учетными данными, если таковые имеются, также здесь я упоминаю, что вы можете изменить кодировку твое сообщение. Я надеюсь, что это все объясняет и поможет вам в кодировании.
источник