.NET HttpClient. Dize değeri POST nasıl?


174

C # ve HttpClient kullanarak aşağıdaki POST isteğini kullanarak nasıl oluşturabilirim: Kullanıcı-Aracı: Fiddler İçerik türü: uygulama / x-www-form-urlencoded Ana bilgisayar: localhost: 6740 İçerik-Uzunluk: 6

WEB API hizmetim için böyle bir talebe ihtiyacım var:

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

1
Resimde hangi HTTP istemcisini kullanıyorsunuz?
— brimstone


1
Web Api MVC hizmetidir. İstek için JSON biçimi ?
— Kiquenet

Yanıtlar:


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, benim HttpClientExtensions böyle bir aşırı yük yok ... i çerçeve 4.0 kullanın
— Ievgen Martynov

1
Hangi aşırı yükünüz yok? Microsoft.AspNet.WebApi.ClientNuGet'i projenize yüklediğinizden emin olun . HttpClientSınıf değildir .NET 4.0, .NET 4.5 inşa edilmiştir. .NET 4.0'da kullanmak istiyorsanız NuGet'e ihtiyacınız var!
— Darin Dimitrov

1
İlk C # SSSCE rastladım. Eğer uygun bir IDE'ye sahip bir dilden geliyorsanız, onu çalıştırmak için bir esinti gibi.
— Buffalo

13
İfadeyi kullanırken HttpClient kullanmanın bir hata
— ren

26
Özel statik salt okunur HttpClient _client = new HttpClient (); bunun yerine aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong
— Sameer

35

Aşağıda senkronize olarak arama yapmak için örnek yer alır, ancak await-sync kullanarak kolayca zaman uyumsuzluk yapabilirsiniz:

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
Bunun işe yarayacağını sanmıyorum. "login" i boş string ile değiştirmelisiniz, KeyValuePair <string, string> ("", "abc") olmalı, kabul edilen cevaba bakınız.
— joedotnot

Bu benim için çalışıyor, $ company_id = $ _POST ("company_id") çağıran php webservice üzerinde çalışmak; bunun gibi. Json olarak gönderirsem php çalışamaz.
— teapeng

8

Asp.net'in web sitesinde sorunuz hakkında bir makale var. Umarım size yardımcı olabilir.

Asp net ile bir api nasıl çağırılır

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

İşte makalenin POST bölümünden küçük bir bölüm

Aşağıdaki kod, JSON biçiminde bir Ürün örneği içeren bir POST isteği gönderir:

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

İstek form-urlencoded, bu yüzden
— JSON'un

It adlı form-urlencoded . Neyse, özellikler için JSON biçimiDateTime ? serileştirme sorunları?
— Kiquenet

4
"PostAsJsonAsync" yöntemini fark gibi görünmüyor Benim HttpClient örneğimde yok.
— Tommy Holman

4

İşte kullanıyorum sonrası isteği göndermek olan bu yazıyı buldum JsonConvert.SerializeObject()& StringContent()için HttpClient.PostAsyncveri

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

Böyle bir şey yapabilirsin

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

Ve sonra strReponse web servisiniz tarafından döndürülen değerleri içermelidir


25
Buradaki soru HttpClient, eskiyi değil, yeniyi nasıl kullanacağımızla ilgiliydi WebRequest.
— Darin Dimitrov

Doğru fark etmedim, birisinin eskisine ihtiyacı olması durumunda yine de gönderiyi bırakacağım ...
— Axel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.