HTTPclient कंटेंट टाइप = एप्लीकेशन / x-www-form-urlencoded का उपयोग करके POST कैसे करें


105

मैं वर्तमान में एक wp8.1 एप्लिकेशन C # विकसित कर रहा हूं, मैंने textbox.texts से एक json ऑब्जेक्ट (bm) बनाकर अपने एपीआई को json में एक POST विधि करने में कामयाब रहा है। यहाँ मेरा कोड नीचे है। मैं एक ही टेक्स्टबॉक्स कैसे लेते हैं। उन्हें सामग्री प्रकार = एप्लिकेशन / x-www-form-urlencoded के रूप में POST करें। उसके लिए कोड क्या है?

            Profile bm = new Profile();
            bm.first_name = Names.Text;
            bm.surname = surname.Text;

            string json = JsonConvert.SerializeObject(bm);

            MessageDialog messageDialog = new MessageDialog(json);//Text should not be empty 
            await messageDialog.ShowAsync();

            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");

            byte[] messageBytes = Encoding.UTF8.GetBytes(json);
            var content = new ByteArrayContent(messageBytes);
            content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var response = client.PostAsync("myapiurl", content).Result;

जवाबों:


177
var nvc = new List<KeyValuePair<string, string>>();
nvc.Add(new KeyValuePair<string, string>("Input1", "TEST2"));
nvc.Add(new KeyValuePair<string, string>("Input2", "TEST2"));
var client = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Post, url) { Content = new FormUrlEncodedContent(nvc) };
var res = await client.SendAsync(req);

या

var dict = new Dictionary<string, string>();
dict.Add("Input1", "TEST2");
dict.Add("Input2", "TEST2");
var client = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Post, url) { Content = new FormUrlEncodedContent(dict) };
var res = await client.SendAsync(req);

13
आप डिक्शनरी के डिक्शनरी को भी पास कर सकते हैं FormUrlEncodedContent, क्योंकि डिक्शनरी एक IEnumerableहै KeyValuePair
सैम मगुरा

टास्क विधि में प्रतीक्षा का उपयोग करना ?
किकेनेट

1
@Kiquenet हाँ, "async टास्क <T>" विधि में
रावतस क्रुंगकेव

18
 var params= new Dictionary<string, string>();
 var url ="Please enter URLhere"; 
 params.Add("key1", "value1");
 params.Add("key2", "value2");

 using (HttpClient client = new HttpClient())
  {
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

HttpResponseMessage response = client.PostAsync(url, new FormUrlEncodedContent(dict)).Result;
              var tokne= response.Content.ReadAsStringAsync().Result;
}

//Get response as expected

5

मेरे लिए सबसे अच्छा समाधान है:

// Add key/value
var dict = new Dictionary<string, string>();
dict.Add("Content-Type", "application/x-www-form-urlencoded");

// Execute post method
using (var response = httpClient.PostAsync(path, new FormUrlEncodedContent(dict))){}

2

आप इस तरह मान सेट कर सकते हैं और उन्हें PostAsyncविधि को भेज सकते हैं :

var apiClient = new HttpClient();
var values = new Dictionary<object, object>
{
    {"key1", val1},
    {"key2", "val2"}
};

var content = new StringContent(JsonConvert.SerializeObject(values), Encoding.UTF8, "application/json");
var response = await apiClient.PostAsync("YOUR_API_ADDRESS", content);

1
प्रश्न में एपीआई अनुमति नहीं देता हैapplication/json
फवाद रजा

-1

मैं .Net Core 2.1 API [FromBody]का उपयोग विशेषता के साथ कर रहा था और मुझे इसे सफलतापूर्वक पोस्ट करने के लिए निम्न समाधान का उपयोग करना पड़ा:

_apiClient =  new HttpClient();
_apiClient.BaseAddress = new Uri(<YOUR API>);
var MyObject myObject = new MyObject(){
    FirstName = "Me",
    LastName = "Myself"
};

var stringified = JsonConvert.SerializeObject(myObject);
var result = await _apiClient.PostAsync("api/appusers", new StringContent(stringified, Encoding.UTF8, "application/json"));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.