it-swarm.com.de

So senden Sie JSON-Daten in einer POST Anfrage mit C #

Ich möchte JSON-Daten in einer POST Anfrage mit C # senden.

Ich habe einige Möglichkeiten ausprobiert, aber viele Probleme. Ich muss anfordern, Request Body als Raw-Json aus String und Json-Daten aus Json-Datei zu verwenden.

Wie kann ich eine Anfrage über diese beiden Datenformulare senden?.

Beispiel: Für den Hauptteil der Authentifizierungsanforderung in json -> {"Username":"myusername","Password":"pass"}

Für andere APIs sollte der Anfragetext aus einer externen JSON-Datei abgerufen werden.

17
Rocky

Sie können das HttpClient anstelle des WebClient und HttpWebRequest verwenden. Es ist eine neuere Implementierung.

string myJson = "{'Username': 'myusername','Password':'pass'}";
using (var client = new HttpClient())
{
    var response = await client.PostAsync(
        "http://yourUrl", 
         new StringContent(myJson, Encoding.UTF8, "application/json"));
}

enter image description here

Wenn Sie Ihr HttpClient mehrmals benötigen, wird empfohlen, nur eine Instanz zu erstellen und wiederzuverwenden oder das neue HttpClientFactory zu verwenden.

38
NtFreX

Du kannst es mit HttpWebRequest machen:

var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://yourUrl");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = new JavaScriptSerializer().Serialize(new
            {
                Username = "myusername",
                Password = "pass"
            });
    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();
}

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var result = streamReader.ReadToEnd();
}
15
kkakkurt

Sie können entweder HttpClient oder RestSharp verwenden, da ich nicht weiß, welcher Code hier ein Beispiel für die Verwendung von httpclient ist:

using (var client = new HttpClient())
        {
            //This would be the like http://www.uber.com
            client.BaseAddress = new Uri("Base Address/URL Address");
            //serialize your json using newtonsoft json serializer then add it to the StringContent
            var content = new StringContent(YourJson, Encoding.UTF8, "application/json") 
            //method address would be like api/callUber:SomePort for example
            var result = await client.PostAsync("Method Address", content);
            string resultContent = await result.Content.ReadAsStringAsync();

        }
4
Valkyrie

Das funktioniert bei mir.

var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://url");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new 

StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = new JavaScriptSerializer().Serialize(new
                {
                    Username = "myusername",
                    Password = "password"
                });

    streamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var result = streamReader.ReadToEnd();
}
2
Rohan Das