c# - parameter - vb net webrequest create post




Come fare la richiesta web HTTP POST (7)

È necessario utilizzare la classe GetRequestStream e il metodo GetRequestStream .

Here un esempio.

Come posso fare una richiesta HTTP e inviare alcuni dati usando il metodo POST ? Posso fare la richiesta GET ma non ho idea di come fare un POST .


È possibile utilizzare IEnterprise.Easy-HTTP poiché ha incorporato l'analisi della classe e la creazione di query:

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

Sono l'autore della libreria quindi sentiti libero di porre domande o controllare il codice in github


Esistono diversi modi per eseguire richieste HTTP GET e POST :

Metodo A: HttpClient

Disponibile in: .NET Framework 4.5+, .NET Standard 1.1+, .NET Core 1.0+

Attualmente l'approccio preferito. Asincrono. Versione portatile per altre piattaforme disponibili tramite NuGet .

using System.Net.Http;

Impostare

Si recommended di HttpClient un'istanza HttpClient per la durata della propria applicazione e condividerla.

private static readonly HttpClient client = new HttpClient();

INVIARE

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

OTTENERE

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

Metodo B: librerie di terze parti

RestSharp

Libreria provata e testata per l'interazione con le API REST. Portatile. Disponibile tramite NuGet .

Flurl.Http

Libreria più recente con un'API fluente e assistenti di test. HttpClient sotto il cofano. Portatile. Disponibile tramite NuGet .

using Flurl.Http;

INVIARE

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

OTTENERE

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

Metodo C: legacy

Disponibile in: .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

INVIARE

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

OTTENERE

var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");

var response = (HttpWebResponse)request.GetResponse();

var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

Metodo D: WebClient (anche ora legacy)

Disponibile in: .NET Framework 1.1+, .NET Standard 2.0+, .NET Core 2.0+

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

INVIARE

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

OTTENERE

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

Quando si utilizza lo spazio dei nomi Windows.Web.Http , per POST anziché FormUrlEncodedContent scriviamo HttpFormUrlEncodedContent. Anche la risposta è il tipo di HttpResponseMessage. Il resto è come ha scritto Evan Mulawski.


Richiesta GET semplice

using System.Net;

...

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

Richiesta POST semplice

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

Se ti piace l'API fluente puoi usare Tiny.RestClient è disponibile su 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>();

Spero che sia d'aiuto!


MSDN ha un campione.

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




httprequest