.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.