net example data c# .net post httpwebrequest httprequest

example - webrequest post c# json



Cómo hacer una solicitud web HTTP POST (10)

Cuando se usa el espacio de nombres Windows.Web.Http , para POST en lugar de FormUrlEncodedContent escribimos HttpFormUrlEncodedContent. También la respuesta es tipo de HttpResponseMessage. El resto es como escribió Evan Mulawski.

¿Cómo puedo realizar una solicitud HTTP y enviar algunos datos utilizando el método POST ? Puedo hacer una solicitud GET pero no tengo idea de cómo hacer un POST .


Este es un ejemplo completo de trabajo de envío / recepción de datos en formato JSON. Usé VS2013 Express Edition.

using System; using System.Collections.Generic; using System.Data; using System.Data.OleDb; using System.IO; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Web.Script.Serialization; namespace ConsoleApplication1 { class Customer { public string Name { get; set; } public string Address { get; set; } public string Phone { get; set; } } public class Program { private static readonly HttpClient _Client = new HttpClient(); private static JavaScriptSerializer _Serializer = new JavaScriptSerializer(); static void Main(string[] args) { Run().Wait(); } static async Task Run() { string url = "http://www.example.com/api/Customer"; Customer cust = new Customer() { Name = "Example Customer", Address = "Some example address", Phone = "Some phone number" }; var json = _Serializer.Serialize(cust); var response = await Request(HttpMethod.Post, url, json, new Dictionary<string, string>()); string responseText = await response.Content.ReadAsStringAsync(); List<YourCustomClassModel> serializedResult = _Serializer.Deserialize<List<YourCustomClassModel>>(responseText); Console.WriteLine(responseText); Console.ReadLine(); } /// <summary> /// Makes an async HTTP Request /// </summary> /// <param name="pMethod">Those methods you know: GET, POST, HEAD, etc...</param> /// <param name="pUrl">Very predictable...</param> /// <param name="pJsonContent">String data to POST on the server</param> /// <param name="pHeaders">If you use some kind of Authorization you should use this</param> /// <returns></returns> static async Task<HttpResponseMessage> Request(HttpMethod pMethod, string pUrl, string pJsonContent, Dictionary<string, string> pHeaders) { var httpRequestMessage = new HttpRequestMessage(); httpRequestMessage.Method = pMethod; httpRequestMessage.RequestUri = new Uri(pUrl); foreach (var head in pHeaders) { httpRequestMessage.Headers.Add(head.Key, head.Value); } switch (pMethod.Method) { case "POST": HttpContent httpContent = new StringContent(pJsonContent, Encoding.UTF8, "application/json"); httpRequestMessage.Content = httpContent; break; } return await _Client.SendAsync(httpRequestMessage); } } }


Hay algunas respuestas muy buenas aquí. Permítame publicar una manera diferente de configurar sus encabezados con el WebClient (). También te mostraré cómo configurar una clave API.

var client = new WebClient(); string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(userName + ":" + passWord)); client.Headers[HttpRequestHeader.Authorization] = $"Basic {credentials}"; //If you have your data stored in an object serialize it into json to pass to the webclient with Newtonsoft''s JsonConvert var encodedJson = JsonConvert.SerializeObject(newAccount); client.Headers.Add($"x-api-key:{ApiKey}"); client.Headers.Add("Content-Type:application/json"); try { var response = client.UploadString($"{apiurl}", encodedJson); //if you have a model to deserialize the json into Newtonsoft will help bind the data to the model, this is an extremely useful trick for GET calls when you have a lot of data, you can strongly type a model and dump it into an instance of that class. Response response1 = JsonConvert.DeserializeObject<Response>(response);


Hay varias formas de realizar solicitudes HTTP GET y POST :

Método A: HttpClient

Disponible en: .NET Framework 4.5+, .NET Standard 1.1+, .NET Core 1.0+

Actualmente el enfoque preferido. Asincrónico. Versión portátil para otras plataformas disponibles a través de NuGet .

using System.Net.Http;

Preparar

Se recommended crear un HttpClient para la vida útil de su aplicación y compartirlo.

private static readonly HttpClient client = new HttpClient();

ENVIAR

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();

OBTENER

var responseString = await client.GetStringAsync("http://www.example.com/recepticle.aspx");

Método B: Bibliotecas de terceros

RestSharp

Biblioteca probada y probada para interactuar con las API REST. Portátil. Disponible a través de NuGet .

Flurl.Http

Nueva biblioteca con una API fluida y ayudantes de pruebas. HttpClient bajo el capó. Portátil. Disponible a través de NuGet .

using Flurl.Http;

ENVIAR

var responseString = await "http://www.example.com/recepticle.aspx" .PostUrlEncodedAsync(new { thing1 = "hello", thing2 = "world" }) .ReceiveString();

OBTENER

var responseString = await "http://www.example.com/recepticle.aspx" .GetStringAsync();

Método C: Legado

Disponible en: .NET Framework 1.1+, .NET Standard 2.0+, .NET Core 1.0+

using System.Net; using System.Text; // for class Encoding using System.IO; // for StreamReader

ENVIAR

var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx"); var postData = "thing1=hello"; postData += "&thing2=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();

OBTENER

var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx"); var response = (HttpWebResponse)request.GetResponse(); var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

Método D: WebClient (también ahora legado)

Disponible en: .NET Framework 1.1+, .NET Standard 2.0+, .NET Core 2.0+

using System.Net; using System.Collections.Specialized;

ENVIAR

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); }

OBTENER

using (var client = new WebClient()) { var responseString = client.DownloadString("http://www.example.com/recepticle.aspx"); }


Puede usar IEnterprise.Easy-HTTP ya que tiene incorporado análisis de clase y creación de consultas:

await new RequestBuilder<ExampleObject>() .SetHost("https://httpbin.org") .SetContentType(ContentType.Application_Json) .SetType(RequestType.Post) .SetModelToSerialize(dto) .Build() .Execute();

Soy el autor de la biblioteca, así que no dude en hacer preguntas o consultar el código en github


Si te gusta la API fluida, puedes usar Tiny.RestClient que está disponible en 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>();

¡Espero que ayude!


Solicitud GET simple

using System.Net; ... using (var wb = new WebClient()) { var response = wb.DownloadString(url); }

Solicitud POST simple

using System.Net; using System.Collections.Specialized; ... using (var wb = new WebClient()) { var data = new NameValueCollection(); data["username"] = "myUser"; data["password"] = "myPassword"; var response = wb.UploadValues(url, "POST", data); string responseInString = Encoding.UTF8.GetString(response); }


Solución simple (de una sola línea, sin comprobación de errores, sin espera de respuesta) que he encontrado hasta ahora

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

utilizar con precaución!


MSDN tiene una muestra.

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(); } } }


WebRequest usar la clase WebRequest y el método GetRequestStream .

Here hay un ejemplo.