当我尝试呼叫网络API时,Windows手机应用程序无法正常运行

时间:2014-05-29 10:04:01

标签: windows-phone-8

我正在开发一个简单的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;  

应用程序被阻止。
它不会抛出异常,只会停留在该行上。

有什么想法吗?

提前谢谢!

2 个答案:

答案 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
    }
}