C# 如何使用HTTPclient content type=application/x-www-form-urlencoded发布

C# 如何使用HTTPclient content type=application/x-www-form-urlencoded发布,c#,windows-phone-8.1,C#,Windows Phone 8.1,我目前正在开发一个wp8.1应用程序C#,通过从textbox.text创建一个json对象(bm),我成功地在json中执行了一个POST方法到我的api。 下面是我的代码。如何将相同的textbox.text作为content-type=application/x-www-form-urlencoded发布。代码是什么 Profile bm = new Profile(); bm.first_name = Names.Text; bm.surname = surname.Text; str

我目前正在开发一个wp8.1应用程序C#,通过从textbox.text创建一个json对象(bm),我成功地在json中执行了一个POST方法到我的api。 下面是我的代码。如何将相同的textbox.text作为
content-type=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;
var nvc=new List();
添加(新的KeyValuePair(“Input1”、“TEST2”);
添加(新的KeyValuePair(“Input2”、“TEST2”);
var client=新的HttpClient();
var req=newhttprequestmessage(HttpMethod.Post,url){Content=newformurlencodedcontent(nvc)};
var res=wait client.SendAsync(req);

var dict=newdictionary();
添加(“输入1”、“测试2”);
dict.Add(“Input2”、“TEST2”);
var client=新的HttpClient();
var req=newhttprequestmessage(HttpMethod.Post,url){Content=newformurlencodedcontent(dict)};
var res=wait client.SendAsync(req);
var params=new Dictionary();
var url=“请在此处输入url”;
参数添加(“键1”、“值1”);
参数添加(“键2”、“值2”);
使用(HttpClient=new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
HttpResponseMessage response=client.PostAsync(url,新表单UrlEncodedContent(dict)).Result;
var token=response.Content.ReadAsStringAsync().Result;
}
//获得预期的响应

我使用的是带有
[FromBody]
属性的.Net Core 2.1 API,我必须使用以下解决方案才能成功发布到它:

_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"));
\u apiClient=new-HttpClient();
_apiClient.BaseAddress=新Uri();
var MyObject MyObject=新的MyObject(){
FirstName=“我”,
LastName=“我自己”
};
var stringified=JsonConvert.SerializeObject(myObject);
var result=wait _apiClient.PostAsync(“api/appusers”,新的StringContent(stringified,Encoding.UTF8,“application/json”);

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

// 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))){}
//添加键/值
var dict=新字典();
dict.Add(“内容类型”、“应用程序/x-www-form-urlencoded”);
//执行post方法
使用(var response=httpClient.PostAsync(路径,新FormUrlEncodedContent(dict)){}

发布此内容类型且不使用字典的另一个变体是:

StringContent postData = new StringContent(JSON_CONTENT, Encoding.UTF8, "application/x-www-form-urlencoded");
using (HttpResponseMessage result = httpClient.PostAsync(url, postData).Result)
{
    string resultJson = result.Content.ReadAsStringAsync().Result;
}

您还可以将字典传递给
FormUrlEncodedContent
的构造函数,因为字典是
KeyValuePair
s的
IEnumerable
。在任务方法中使用Wait?@Kiquenet yes,在“异步任务”方法中询问有关
x-www-form-urlencoded
的问题,虽然这是
json
params
如何变成
dict
_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"));
// 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))){}
StringContent postData = new StringContent(JSON_CONTENT, Encoding.UTF8, "application/x-www-form-urlencoded");
using (HttpResponseMessage result = httpClient.PostAsync(url, postData).Result)
{
    string resultJson = result.Content.ReadAsStringAsync().Result;
}