วิธีการโพสต์โดยใช้ HTTPclient content type = application / x-www-form-urlencoded


111

ฉันกำลังพัฒนาแอปพลิเคชั่น wp8.1 C # ฉันได้จัดการวิธีการ POST ใน json ไปยัง api ของฉันโดยสร้างวัตถุ json (bm) จาก textbox.texts นี่คือรหัสของฉันด้านล่าง ฉันจะใช้ textbox.text เดียวกันและ POST เป็นประเภทเนื้อหา = application / x-www-form-urlencoded ได้อย่างไร รหัสนั้นคืออะไร?

            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;

คำตอบ:


190
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ของKeyValuePairs
Sam Magura

ใช้awaitใน Task method หรือไม่
Kiquenet

1
@Kiquenet ใช่ในวิธี "async Task <T>"
รวิทัสกรุงแก้ว

19
 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

7

ทางออกที่ดีที่สุดสำหรับฉันคือ:

// 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
API ที่เป็นปัญหาไม่อนุญาตapplication/json
Fawad Raza

-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"));
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.