Canonical
Como posso fazer uma solicitação HTTP e enviar alguns dados usando oPOST
método?
Posso fazer uma GET
solicitação, mas não tenho idéia de como fazer uma POST
solicitação.
fonte
Canonical
Como posso fazer uma solicitação HTTP e enviar alguns dados usando oPOST
método?
Posso fazer uma GET
solicitação, mas não tenho idéia de como fazer uma POST
solicitação.
Existem várias maneiras de executar HTTP GET
e POST
solicitações:
Disponível em: .NET Framework 4.5+
, .NET Standard 1.1+
, .NET Core 1.0+
.
Atualmente, é a abordagem preferida e é assíncrona e de alto desempenho. Use a versão interna na maioria dos casos, mas para plataformas muito antigas existe um pacote NuGet .
using System.Net.Http;
É recomendável instanciar um HttpClient
durante a vida útil do aplicativo e compartilhá-lo, a menos que você tenha um motivo específico para não fazê-lo.
private static readonly HttpClient client = new HttpClient();
Veja HttpClientFactory
para uma solução de injeção de dependência .
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;
É uma biblioteca mais nova com uma API fluente, testando auxiliares, usa o HttpClient sob o capô e é portátil. Está disponível via 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();
Disponível em: .NET Framework 1.1+
, .NET Standard 2.0+
, .NET Core 1.0+
. No .NET Core, é principalmente para compatibilidade - envolve HttpClient
, tem menos desempenho e não obtém novos recursos.
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();
Este é um invólucro HttpWebRequest
. Compare comHttpClient
.
Disponível em: .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()
Solicitação GET simples
Pedido POST simples
fonte
MSDN tem uma amostra.
fonte
Este é um exemplo completo de envio / recebimento de dados no formato JSON, usei o Visual Studio 2013 Express Edition:
fonte
Existem algumas respostas realmente boas aqui. Deixe-me postar uma maneira diferente de definir seus cabeçalhos com o WebClient (). Também mostrarei como definir uma chave de API.
fonte
Esta solução usa nada além de chamadas .NET padrão.
Testado:
Referência:
Código:
Para chamar sem parâmetros (usa um "GET" nos bastidores):
Para chamar com parâmetros (usa um "POST" nos bastidores):
fonte
Solução simples (one-liner, sem verificação de erros, sem espera de resposta) que encontrei até agora:
Use com cuidado!
fonte
Ao usar o namespace Windows.Web.Http , para POST em vez de FormUrlEncodedContent, escrevemos HttpFormUrlEncodedContent. Além disso, a resposta é do tipo HttpResponseMessage. O resto é como Evan Mulawski escreveu.
fonte
Se você gosta de uma API fluente, pode usar o Tiny.RestClient . Está disponível no NuGet .
fonte
Por que isso não é totalmente trivial? Fazer a solicitação não está, e principalmente, não está lidando com os resultados e parece que existem alguns erros do .NET envolvidos - consulte Bug no HttpClient.GetAsync deve lançar WebException, não TaskCanceledException
Acabei com este código:
Isso fará com que um GET ou POST dependa se
postBuffer
for nulo ou nãose Sucesso for verdadeiro, a resposta estará em
ResponseAsString
Se o sucesso é falso você pode verificar
WebExceptionStatus
,HttpStatusCode
eResponseAsString
tentar ver o que deu errado.fonte
No núcleo .net, você pode fazer uma pós-chamada com o código a seguir, aqui adicionei alguns recursos extras a esse código para que seu código funcione por trás de um proxy e com credenciais de rede, se houver, também menciono aqui que você pode alterar a codificação de sua mensagem. Espero que isso explique tudo e ajude você na codificação.
fonte