Mobile MVVMCross PCL REST调用在Android中工作,而不是在Windows Phone中

Mobile MVVMCross PCL REST调用在Android中工作,而不是在Windows Phone中,mobile,windows-phone,httpclient,mvvmcross,portable-class-library,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 {

在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;
        }
    }
}
class CallSAPService:ICallSAPService
{
公共字符串MakeSAPRestCall(字符串url、字符串jsondata、字符串用户名、字符串密码)
{
字符串retmessage=“”;
尝试
{
NetworkCredential cr=新的NetworkCredential();
cr.UserName=用户名;
cr.密码=密码;
HttpClientHandler handler=新的HttpClientHandler();
handler.Credentials=cr;
HttpClient HttpClient=新的HttpClient(处理程序);
uriauri=新的Uri(url);
StringContent=new System.Net.Http.StringContent(jsondata.ToString(),Encoding.UTF8,“application/json”);
var result=httpClient.PostAsync(Auri,content.result);
Task ff=result.Content.ReadAsStringAsync();
retmessage=ff.Result;
//StringContent content2=new System.Net.Http.StringContent(jsondata.ToString(),Encoding.UTF8,“application/json”);
//var httpClient2=新的HttpClient(新的HttpClientHandler());
//任务响应=httpClient2.PostAsync(url,content2);
//response.Result.EnsureSuccessStatusCode();
//var res=响应结果;
//retmessage=res.Content.ReadAsStringAsync().ToString();
}    
捕获(例外情况除外)
{
retmessage=Ex.Message;
}
返回消息;
}
}
}
这适用于Andorid,但不适用于Windows Phone项目。在windows phone项目中,行:
Task ff=result.Content.ReadAsStringAsync()无法执行

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

retmessage = ff.Result;
在Windows Phone中,无法在UI线程上执行同步I/O。使用async和Wait代替Task.Result