如何使用HTTPclient内容类型= application/x-www-form-urlencoded进行POST

Pri*_*him 72 c# windows-phone-8.1

我正在开发一个wp8.1应用程序C#,我已经设法通过从textbox.texts创建一个json对象(bm)来在json中执行一个POST方法到我的api.这是我的代码如下.我如何使用相同的textbox.text并将它们作为内容类型= application/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;
Run Code Online (Sandbox Code Playgroud)

Raw*_*aew 122

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);
Run Code Online (Sandbox Code Playgroud)

要么

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);
Run Code Online (Sandbox Code Playgroud)

  • 您还可以将字典传递给`FormUrlEncodedContent`的构造函数,因为Dictionary是`IEnumerable`的`KeyValuePair`. (11认同)
  • @Kiquenet是的,在“异步任务&lt;T&gt;”方法中 (2认同)

小智 14

对我来说最好的解决方案是:

// 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))){}
Run Code Online (Sandbox Code Playgroud)


小智 9

 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
Run Code Online (Sandbox Code Playgroud)

  • 请注意,HttpClient 应该被重用,而不是被丢弃。https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient#instancing (3认同)
  • `params` 如何变成 `dict` ? (2认同)