我正在开发一个简单的Windows Phone 8应用程序
我不使用MVVM
,这很简单
我有一个按钮,当我按下它时,我想在数据库中添加一些数据(使用post方法)
网络API
位于asp.net
,因为我使用fiddler
和控制台应用程序进行了测试,因此工作正常。
该按钮背后的代码如下:
private void Button_Click(object sender, RoutedEventArgs e)
{
HttpClient client = new HttpClient();
string baseUrl = "myWebApiLink";
client.BaseAddress = new Uri(baseUrl);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string serviceUrl;
serviceUrl = "api/People";
var anEmployee = new People()
{
FirstName = "Windows",
LastName = "Phone",
Age = 8
};
HttpResponseMessage response;
response = client.PostAsJsonAsync(serviceUrl, anEmployee).Result; //the problem
if (response.IsSuccessStatusCode)
{
//some success messages
}
else
{
//some fail messages
}
UriKind.Relative));
}
在
行response = client.PostAsJsonAsync(serviceUrl, anEmployee).Result;
应用程序被阻止。
它不会抛出异常,只会停留在该行上。
有什么想法吗?
提前谢谢!
答案 0 :(得分:1)
实际上我不认为它在那一行上说,你正在调用一个异步方法,这意味着你的代码继续执行而不等待响应。通过添加异步更改方法签名,然后等待来自调用的respoonse将起作用。这是您的代码修改。
private async void Button_Click(object sender, RoutedEventArgs e)
{
HttpClient client = new HttpClient();
string baseUrl = "myWebApiLink/";
client.BaseAddress = new Uri(baseUrl);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string serviceUrl;
serviceUrl = "api/People";
var anEmployee = new People()
{
FirstName = "Windows",
LastName = "Phone",
Age = 8
};
var request = new HttpRequestMessage(HttpMethod.Post, serviceUrl);
var requestContent = anEmployee; //this value is a string, check the format on your server
request.Content = new StringContent(requestContent, Encoding.UTF8, "application/json");
HttpResponseMessage response;
response = await client.SendAsync(request); //no longer the problem
if (response.IsSuccessStatusCode)
{
//some success messages
}
else
{
//some fail messages
}
}
答案 1 :(得分:1)
使用async按钮客户端并等待post异步调用...这是如何。
private async void Button_Click(object sender, RoutedEventArgs e)
{
HttpClient client = new HttpClient();
string baseUrl = "myWebApiLink";
client.BaseAddress = new Uri(baseUrl);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string serviceUrl;
serviceUrl = "api/People";
var anEmployee = new People()
{
FirstName = "Windows",
LastName = "Phone",
Age = 8
};
HttpResponseMessage response;
response = await client.PostAsJsonAsync(serviceUrl, anEmployee).Result;
if (response.IsSuccessStatusCode)
{
//some success messages
}
else
{
//some fail messages
}
}