Windows phone 8 当I';我正在尝试调用web api

Windows phone 8 当I';我正在尝试调用web api,windows-phone-8,Windows Phone 8,我正在开发一个简单的windows phone 8应用程序。 我不使用MVVM,它非常简单。 我有一个按钮,当我按下它时,我想向数据库中添加一些数据(使用post方法)。 webAPI是在asp.net中制作的,它工作正常,因为我使用fiddler以及控制台应用程序进行了测试。 按钮后面的代码如下所示: private void Button_Click(object sender, RoutedEventArgs e) { HttpClient client = new

我正在开发一个简单的windows phone 8应用程序。
我不使用MVVM,它非常简单。
我有一个按钮,当我按下它时,我想向数据库中添加一些数据(使用post方法)。
web
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;  
应用程序刚刚被阻止。
它不会抛出异常,只是停留在该行上

有什么想法吗


提前谢谢你

实际上,我不认为它在这一行中说,您正在调用一个异步方法,这意味着您的代码将继续执行,而不等待响应。通过添加async更改方法签名,然后等待调用的响应将起作用。这是你的代码修改

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

使用异步按钮客户端并等待后异步调用。。。这里是如何

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

您是否尝试使按钮单击事件异步并在同步后使用wait。e、 g.专用异步无效按钮\u单击(对象发送方,路由目标e)。。。。response=awiat client.PostAsJsonAsync(serviceUrl,anEmployee)已签出并包含在内。您是否尝试过
response=wait client.PostAsJsonAsync(serviceUrl,anEmployee)?它以某种方式解决了问题,现在应用程序不再停止。但id不会添加到数据库中。您是否尝试在等待行之后设置断点?结果内容是什么?感谢您的回答,但行响应=wait client.postsjsonasync(serviceUrl,anEmployee).result;生成以下错误:无法等待“System.Net.Http.HttpResponseMessage”。我可以删除“.Result”它可以工作,但不能添加到数据库中。我发现了问题。我发布了网站,并解锁了我的端口。我没有足够的徽章来评价你的答案,所以我只想说谢谢你的支持!:)感谢您的回答,但行响应=wait client.postsjsonasync(serviceUrl,anEmployee).Result;生成以下错误:无法等待“System.Net.Http.HttpResponseMessage”。我可以删除“.Result”它可以工作,但不会添加到数据库中。我对代码做了一些更改,现在使用HttpRequestMessage发送POST参数。我看到的唯一的另一个问题是员工的价值,以及您希望如何在服务器上接收它。如果服务器需要json字符串,则将其格式化为json字符串。Acctualy response.IssuccessStatusCode为false。这可能是因为我删除了response=wait client.postsjsonasync(serviceUrl,anEmployee.Result)行中的.Result。如果我没有解析.Result,我会得到一个错误:Cannot wait'System.Net.Http.HttpResponseMessage'我发现了问题。我发布了网站,并解锁了我的端口。我没有足够的徽章来评价你的答案,所以我只想感谢大家的支持!:)这很有帮助!