मैं अपने HttpClient PostAsync दूसरे पैरामीटर के लिए HttpContent कैसे सेट करूं?


261
public static async Task<string> GetData(string url, string data)
{
    UriBuilder fullUri = new UriBuilder(url);

    if (!string.IsNullOrEmpty(data))
        fullUri.Query = data;

    HttpClient client = new HttpClient();

    HttpResponseMessage response = await client.PostAsync(new Uri(url), /*expects HttpContent*/);

    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    response.EnsureSuccessStatusCode();
    string responseBody = await response.Content.ReadAsStringAsync();

    return responseBody;
}

PostAsyncअन्य पैरामीटर है कि जरूरतों को होने के लिए ले जाता है HttpContent

मैं कैसे सेट अप HttpContentकरूं? कहीं भी कोई डॉक्यूमेंटेशन नहीं है जो विंडोज फोन 8 के लिए काम करता है।

अगर मैं करता हूँ GetAsync, यह महान काम करता है! लेकिन यह कुंजी = "bla", कुछ = "yay" की सामग्री के साथ POST होना चाहिए

// संपादित करें

उत्तर के लिए बहुत बहुत धन्यवाद ... यह अच्छी तरह से काम करता है, लेकिन अभी भी यहां कुछ अनिश्चित हैं:

    public static async Task<string> GetData(string url, string data)
    {
        data = "test=something";

        HttpClient client = new HttpClient();
        StringContent queryString = new StringContent(data);

        HttpResponseMessage response = await client.PostAsync(new Uri(url), queryString );

        //response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();

        return responseBody;
    }

डेटा "परीक्षण = कुछ" जो मैंने ग्रहण किया है, पोस्ट डेटा "टेस्ट" के रूप में एपीआई की तरफ ले जाएगा, जाहिर है यह नहीं करता है। एक अन्य मामले में, मुझे पोस्ट डेटा के माध्यम से संपूर्ण ऑब्जेक्ट्स / सरणियों को पोस्ट करने की आवश्यकता हो सकती है, इसलिए मुझे लगता है कि ऐसा करने के लिए json सबसे अच्छा होगा। कैसे मैं के माध्यम से पोस्ट डेटा मिलता है पर कोई विचार?

शायद कुछ इस तरह:

class SomeSubData
{
    public string line1 { get; set; }
    public string line2 { get; set; }
}

class PostData
{
    public string test { get; set; }
    public SomeSubData lines { get; set; }
}

PostData data = new PostData { 
    test = "something",
    lines = new SomeSubData {
        line1 = "a line",
        line2 = "a second line"
    }
}
StringContent queryString = new StringContent(data); // But obviously that won't work

जवाबों:


162

इसका उत्तर कुछ इस तरह दिया गया है कि HttpContent के साथ-साथ इस ब्लॉग पोस्ट में कैसे उपयोग किया जा सकता है

सारांश में, आप सीधे एक उदाहरण स्थापित नहीं कर सकते HttpContentक्योंकि यह एक सार वर्ग है । आपको अपनी ज़रूरत के आधार पर इससे प्राप्त एक वर्ग का उपयोग करने की आवश्यकता है। सबसे अधिक संभावना है StringContent, जो आपको प्रतिक्रिया, स्ट्रिंग, और कंस्ट्रक्टर में मीडिया प्रकार के स्ट्रिंग मान को सेट करने देता है। देखें: http://msdn.microsoft.com/en-us/library/system.net.http.stringcontent.aspx


2
मैं इसकी जांच करूंगा। मुझे लगता है कि जब मुझे यह पता चलता है, तो मुझे इसे कहीं रखना होगा जहां हर कोई इसे देख सकता है! यह मुझे अब 4 दिनों के लिए जा रहा है, एक एपीआई के लिए एक सरल रीस्ट प्राप्त करने की कोशिश कर रहा है।
जिममिथ १

StringContent ने बहुत अच्छा काम किया, लेकिन वास्तव में, PostData को उस साइट के माध्यम से प्राप्त करने के लिए प्राप्त नहीं किया जा सकता है जिसे अब मैं कॉल कर रहा हूं: D। मैं आपको यह दिखाने के लिए प्रश्न
पूछूंगा

2
"मैं अपनी कक्षा का JSON रिप्रसेन्टेशन कैसे पोस्ट करूं" का एक त्वरित उत्तर है "JSON पर ऑब्जेक्ट को क्रमबद्ध करें, संभवतः JSON.Net के साथ", लेकिन यह वास्तव में एक अलग प्रश्न के अंतर्गत आता है।
प्रेस्टन गुइलोट

92

प्रेस्टन के उत्तर में जोड़ने के लिए, यहाँ HttpContentमानक पुस्तकालय में उपलब्ध व्युत्पन्न वर्गों की पूरी सूची दी गई है:

साभार: https://pfelix.wordpress.com/2012/01/16/the-new-system-net-http-classes-message-content/

साभार : https://pfelix.wordpress.com/2012/01/16/the-new-system-net-http-classes-message-content/

वहाँ एक माना जाता है, ObjectContentलेकिन मैं इसे खोजने में असमर्थ था ASP.NET Core

बेशक, आप एक्सटेंशन के HttpContentसाथ पूरी चीज़ को एक साथ छोड़ सकते हैं Microsoft.AspNet.WebApi.Client(आपको इसे अभी तक ASP.NET कोर में काम करने के लिए आयात करना होगा: https://github.com/aspnet/Home/issues/1558 ) और फिर आप निम्न कार्य कर सकते हैं:

var response = await client.PostAsJsonAsync("AddNewArticle", new Article
{
    Title = "New Article Title",
    Body = "New Article Body"
});

3
सबसे व्यापक जवाब .. जाहिरा तौर पर जटिल कार्य को प्राप्त करने के लिए बहुत साफ और स्वच्छ तरीका।
सलमान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.