كيف تنشر البيانات باستخدام HttpClient؟

سئل على ١٥ نوفمبر ٢٠١٣  ·  تمت مشاهدة 112.7k مرة  ·  مصدر

user2970840 picture
في ١٥ نوفمبر ٢٠١٣

لقد حصلت على عميل Http هذا من Nuget.

عندما أرغب في الحصول على البيانات ، أفعل ذلك بهذه الطريقة:

var response = await httpClient.GetAsync(url);
var data = await response.Content.ReadAsStringAsync();

لكن المشكلة هي أنني لا أعرف كيف أنشر البيانات؟ لا بد لي من إرسال طلب نشر وإرسال هذه القيم بداخله: comment="hello world" و questionId = 1 . يمكن أن تكون هذه خصائص فصل دراسي ، لا أعرف.

تحديث لا أعرف كيفية إضافة هذه القيم إلى HttpContent لأن طريقة النشر تحتاجها. httClient.Post(string, HttpContent);

الإجابات

Icaro Bombonato picture
في ١٥ نوفمبر ٢٠١٣
153

تحتاج إلى استخدام:

await client.PostAsync(uri, content);

شئ مثل هذا:

var comment = "hello world";
var questionId = 1;

var formContent = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("comment", comment), 
    new KeyValuePair<string, string>("questionId", questionId) 
});

var myHttpClient = new HttpClient();
var response = await myHttpClient.PostAsync(uri.ToString(), formContent);

وإذا كنت بحاجة إلى الحصول على الرد بعد النشر ، فيجب عليك استخدام:

var stringContent = await response.Content.ReadAsStringAsync();

آمل أن يساعد ؛)

L.Zoffoli picture
في ١٢ يونيو ٢٠١٩
4

حاول استخدام هذا:

using (var handler = new HttpClientHandler() { CookieContainer = new CookieContainer() })
{
    using (var client = new HttpClient(handler) { BaseAddress = new Uri("site.com") })
    {
        //add parameters on request
        var body = new List<KeyValuePair<string, string>>
        {
            new KeyValuePair<string, string>("test", "test"),
            new KeyValuePair<string, string>("test1", "test1")
        };

        HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "site.com");

        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded; charset=UTF-8"));
        client.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1");
        client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
        client.DefaultRequestHeaders.Add("X-MicrosoftAjax", "Delta=true");
        //client.DefaultRequestHeaders.Add("Accept", "*/*");

        client.Timeout = TimeSpan.FromMilliseconds(10000);

        var res = await client.PostAsync("", new FormUrlEncodedContent(body));

        if (res.IsSuccessStatusCode)
        {
            var exec = await res.Content.ReadAsStringAsync();
            Console.WriteLine(exec);
        }                    
    }
}
Lori Lalonde - MSFT picture
في ١٥ نوفمبر ٢٠١٣
-2

استخدم طريقة UploadStringAsync :

WebClient webClient = new WebClient();
webClient.UploadStringCompleted += (s, e) =>
{
    if (e.Error != null)
    {
        //handle your error here
    }
    else
    {
        //post was successful, so do what you need to do here
    }
};

webClient.UploadStringAsync(new Uri(yourUri), UriKind.Absolute), "POST", yourParameters);