MVVMCross PCL REST调用适用于Android而非Windows Phone

时间:2014-01-11 07:37:56

标签: mobile windows-phone httpclient mvvmcross portable-class-library

在PCL中有以下代码

class CallSAPService : ICallSAPService
    {
        public string MakeSAPRestCall(string url, string jsondata, string username, string password)
        {
            string retmessage = "";
            try
            {
                NetworkCredential cr = new NetworkCredential();
                cr.UserName = username;
                cr.Password = password;
                HttpClientHandler handler = new HttpClientHandler();
                handler.Credentials = cr;
                HttpClient httpClient = new HttpClient(handler);
                 Uri Auri = new Uri(url);
                StringContent content = new System.Net.Http.StringContent(jsondata.ToString(), Encoding.UTF8, "application/json");
                var result = httpClient.PostAsync(Auri, content).Result;
                 Task<string> ff = result.Content.ReadAsStringAsync();
                 retmessage = ff.Result;

                 //StringContent content2 = new System.Net.Http.StringContent(jsondata.ToString(), Encoding.UTF8, "application/json");
                 //var httpClient2 = new HttpClient(new HttpClientHandler());
                 //Task<HttpResponseMessage> response = httpClient2.PostAsync(url, content2);
                 //response.Result.EnsureSuccessStatusCode();
                 //var res = response.Result;

                 // retmessage =  res.Content.ReadAsStringAsync().ToString();
            }    
            catch (Exception Ex)
            {
                retmessage = Ex.Message;
            }

            return retmessage;
        }
    }
}

这适用于Andorid但不适用于Windows Phone项目。在windows phone项目中行:   Task<string> ff = result.Content.ReadAsStringAsync();没有执行

1 个答案:

答案 0 :(得分:0)

我很确定这一行是你的问题:

retmessage = ff.Result;

您无法在Windows Phone的UI线程上执行同步I / O.使用async和await而不是Task.Result。