[英]Calling REST from Windows Phone 8.1 using PostAsync, HttpClient & Json
我的问题与使用PostAsync,HttpClient和Json从C#Metro UI Client调用MVC4 WebAPI方法非常相似,这不足以解决我的问题。
这是我在Windows Phone 8.1项目中的代码:
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri(baseAddress);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "YW5vbnltb3VzOmFub255bW91cw==");
var message = "{ \"userName\" : \"WebAppUser\", \"password\" : \"M@mie!duCanta1l\" }";
var json_object = JsonConvert.SerializeObject(message);
HttpContent content = new StringContent(json_object.ToString(), Encoding.UTF8);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
HttpResponseMessage response = httpClient.PostAsync(baseAddress + "/s/VpCredentials/1.0/IAuthentication/REST_JSON/Validate", content).Result;
string statusCode = response.StatusCode.ToString();
response.EnsureSuccessStatusCode();
Task<string> responseBody = response.Content.ReadAsStringAsync();
}
responseBody始终会返回其中包含https://m.vente-privee.com/f/fail_int.png的一小段html,表示调用失败。 Chrome中Postman中内置的同一调用将返回以下成功字符串:
{
"ValidateResult": {
"Expiration": "/Date(1404214568532+0200)/",
"Token": "P36Hm9K9zI1gm75hfOqI6hudfdGw8y7Zu1fVgbaSHp7ayvfLUn4YtNxU/8siJ7Wa",
"UserName": "WebAppUser"
},
"result": 1,
"analytics": true
}
您知道我的C#代码在做什么错吗? 谢谢。
这里有两个问题。
相关: 为什么HttpClient BaseAddress不起作用?
baseAddress
以正斜杠( /
)结尾。 在此调用中,不要使用前导斜杠( /
),也不要在baseAddress
之前添加baseAddress
,它会自动添加:
(问题)
httpClient.PostAsync(baseAddress + "/s/VpCredentials/1.0/IAuthentication/REST_JSON/Validate", content).Result;
(已更正)
httpClient.PostAsync("s/VpCredentials/1.0/IAuthentication/REST_JSON/Validate", content).Result;
不要这样做:
var message = "{ \"userName\" : \"WebAppUser\", \"password\" : \"M@mie!duCanta1l\" }";
var json_object = JsonConvert.SerializeObject(message);
那就是创建一个包含JSON的JSON序列化字符串-一种双编码形式,这很可能不是您想要的。 通常,您永远都不应该在代码中创建JSON数据字符串文字。
做这个:
var message = new
{
userName = "WebAppUser",
password = "M@mie!duCanta1l"
};
var json_object = JsonConvert.SerializeObject(message);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.