.NET HttpClient. Bagaimana cara nilai string POST?


174

Bagaimana saya bisa membuat menggunakan C # dan HttpClient permintaan POST berikut: User-Agent: Fiddler Jenis konten: application / x-www-form-urlencoded Host: localhost: 6740 Panjang Konten: 6

Saya membutuhkan permintaan untuk layanan API WEB saya:

[ActionName("exist")]
[HttpPost]
public bool CheckIfUserExist([FromBody] string login)
{           
    return _membershipProvider.CheckIfExist(login);
}

1
Klien HTTP apa yang Anda gunakan dalam gambar?
belerang


1
Layanannya adalah Web Api MVC. Format JSON untuk permintaan?
Kiquenet

Jawaban:


433
using System;
using System.Collections.Generic;
using System.Net.Http;

class Program
{
    static void Main(string[] args)
    {
        Task.Run(() => MainAsync());
        Console.ReadLine();
    }

    static async Task MainAsync()
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:6740");
            var content = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("", "login")
            });
            var result = await client.PostAsync("/api/Membership/exists", content);
            string resultContent = await result.Content.ReadAsStringAsync();
            Console.WriteLine(resultContent);
        }
    }
}

1
hm, HttpClientExtensions saya tidak memiliki kelebihan seperti itu ... saya menggunakan framework 4.0
Ievgen Martynov

1
Kelebihan mana yang tidak Anda miliki? Pastikan Anda telah menginstal Microsoft.AspNet.WebApi.ClientNuGet ke proyek Anda. The HttpClientkelas dibangun di NET 4.5, tidak di NET 4.0. Jika Anda ingin menggunakannya dalam. NET 4.0 Anda memerlukan NuGet!
Darin Dimitrov

1
Pertama C # SSSCE saya temui. Seolah-olah itu sangat mudah untuk membuatnya berjalan jika Anda berasal dari bahasa dengan IDE yang tepat.
Buffalo

13
Hanya sebuah catatan bahwa menggunakan HttpClient dalam menggunakan pernyataan adalah sebuah kesalahan
ren

26
Anda sebaiknya private static readonly HttpClient _client = new HttpClient (); sebaliknya aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong
Sameer Alibhai

35

Di bawah ini adalah contoh untuk memanggil secara sinkron tetapi Anda dapat dengan mudah mengubah ke async dengan menggunakan await-sync:

var pairs = new List<KeyValuePair<string, string>>
            {
                new KeyValuePair<string, string>("login", "abc")
            };

var content = new FormUrlEncodedContent(pairs);

var client = new HttpClient {BaseAddress = new Uri("http://localhost:6740")};

    // call sync
var response = client.PostAsync("/api/membership/exist", content).Result; 
if (response.IsSuccessStatusCode)
{
}

1
Saya tidak berpikir ini akan berhasil. Anda harus mengganti "login" dengan string kosong, seharusnya KeyValuePair <string, string> ("", "abc"), lihat jawaban yang diterima.
joedotnot

ini bekerja untuk saya, bekerja pada layanan web php yang memanggil $ company_id = $ _POST ("company_id"); seperti itu. Jika saya kirim sebagai json, php tidak dapat berfungsi.
teapeng

8

Ada artikel tentang pertanyaan Anda di situs web asp.net. Saya harap ini bisa membantu Anda.

Cara memanggil api dengan asp net

http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client

Ini adalah sebagian kecil dari bagian POST pada artikel

Kode berikut mengirimkan permintaan POST yang berisi contoh Produk dalam format JSON:

// HTTP POST
var gizmo = new Product() { Name = "Gizmo", Price = 100, Category = "Widget" };
response = await client.PostAsJsonAsync("api/products", gizmo);
if (response.IsSuccessStatusCode)
{
    // Get the URI of the created resource.
    Uri gizmoUrl = response.Headers.Location;
}

Permintaan ini berupa urlencoded jadi saya tidak berpikir JSON akan berfungsi
ChrisFletcher

Ini berbentuk urlencoded . Bagaimanapun, format JSON untuk DateTimeproperti? masalah serialisasi?
Kiquenet

4
Saya sepertinya tidak memperhatikan metode Anda "PostAsJsonAsync" Tidak tersedia dalam contoh HttpClient saya.
Tommy Holman

4

Di sini saya menemukan artikel ini yang mengirim permintaan pos menggunakan JsonConvert.SerializeObject()& StringContent()ke HttpClient.PostAsyncdata

static async Task Main(string[] args)
{
    var person = new Person();
    person.Name = "John Doe";
    person.Occupation = "gardener";

    var json = Newtonsoft.Json.JsonConvert.SerializeObject(person);
    var data = new System.Net.Http.StringContent(json, Encoding.UTF8, "application/json");

    var url = "https://httpbin.org/post";
    using var client = new HttpClient();

    var response = await client.PostAsync(url, data);

    string result = response.Content.ReadAsStringAsync().Result;
    Console.WriteLine(result);
}

1

Anda bisa melakukan sesuatu seperti ini

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:6740/api/Membership/exist");

req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";         
req.ContentLength = 6;

StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
streamOut.Write(strRequest);
streamOut.Close();
StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
string strResponse = streamIn.ReadToEnd();
streamIn.Close();

Dan kemudian strReponse harus berisi nilai yang dikembalikan oleh layanan web Anda


25
Pertanyaannya di sini adalah tentang bagaimana menggunakan yang baru HttpClientdan yang lama WebRequest.
Darin Dimitrov

Benar saya tidak menyadarinya, saya tetap akan meninggalkan pos kalau-kalau seseorang membutuhkan yang lama ...
Axel
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.