Post Xamarin.iOS后台同步

Post Xamarin.iOS后台同步,post,xamarin.forms,xamarin.ios,background,background-task,Post,Xamarin.forms,Xamarin.ios,Background,Background Task,我使用Xamarin.Forms/Xamarin.iOS应用程序向api发送请求。但是,当我将应用程序放在后台,而api没有回答时,PostAsync会抛出以下错误: System.Threading.Tasks.TaskCanceledException: A task was canceled. at System.Net.Http.NSUrlSessionHandler.SendAsync (System.Net.Http.HttpRequestMessage request, Sys

我使用Xamarin.Forms/Xamarin.iOS应用程序向api发送请求。但是,当我将应用程序放在后台,而api没有回答时,PostAsync会抛出以下错误:

System.Threading.Tasks.TaskCanceledException: A task was canceled.
  at System.Net.Http.NSUrlSessionHandler.SendAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x001d4] in /Library/Frameworks/Xamarin.iOS.framework/Versions/13.20.2.2/src/Xamarin.iOS/Foundation/NSUrlSessionHandler.cs:527 
  at System.Net.Http.HttpClient.FinishSendAsyncBuffered (System.Threading.Tasks.Task`1[TResult] sendTask, System.Net.Http.HttpRequestMessage request, System.Threading.CancellationTokenSource cts, System.Boolean disposeCts) [0x0017e] in /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/src/Xamarin.iOS/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpClient.cs:506 
我的PostAsync方法是:

public async Task<LoginResponse<LoginDataResponse>> Login(LoginRequest request)
        {
            LoginResponse<LoginDataResponse> responseModel = new LoginResponse<LoginDataResponse>();
            try
            {
                string json = JsonConvert.SerializeObject(request);
                var content = new StringContent(json, Encoding.UTF8, "application/json");

                var jsonBody = await _client.PostAsync(App.ServiceURL.Login_Url, content);
                string jsonstr = await jsonBody.Content.ReadAsStringAsync();

                if (jsonstr == null || jsonstr == "")
                {
                    responseModel.Success = false;
                    responseModel.Status = 0;
                    responseModel.Message = AppResources.UnknownHostException;
                }
                else
                    responseModel = (LoginResponse<LoginDataResponse>)JsonConvert.DeserializeObject(jsonstr, typeof(LoginResponse<LoginDataResponse>));
            }
            catch (Exception ex)
            {
                string text = ex.ToString();
                responseModel.Status = 0;
                AppResources.Culture = CrossMultilingual.Current.CurrentCultureInfo;
                responseModel.Message = AppResources.UnknownHostException;
            }
            return responseModel;
        }
公共异步任务登录(登录请求)
{
LoginResponse responseModel=新的LoginResponse();
尝试
{
字符串json=JsonConvert.SerializeObject(请求);
var content=newstringcontent(json,Encoding.UTF8,“application/json”);
var jsonBody=wait_client.PostAsync(App.ServiceURL.Login_Url,content);
字符串jsonstr=await jsonBody.Content.ReadAsStringAsync();
如果(jsonstr==null | | jsonstr==“”)
{
responseModel.Success=false;
responseModel.Status=0;
responseModel.Message=AppResources.UnknownHostException;
}
其他的
responseModel=(LoginResponse)JsonConvert.DeserializeObject(jsonstr,typeof(LoginResponse));
}
捕获(例外情况除外)
{
字符串文本=例如ToString();
responseModel.Status=0;
AppResources.Culture=CrossMultilanguage.Current.CurrentCultureInfo;
responseModel.Message=AppResources.UnknownHostException;
}
返回响应模型;
}

我的系统有一个发送通知的双因素身份验证机制。为了批准通知,我必须把我的申请放在后台。批准通知后,api响应并获得成功结果。但是,当应用程序转到后台时,我与服务的连接中断。如何在后台继续PostAsync?

我找到了解决此问题的方法。我为iOS的HttpClient对象添加了一个配置。此配置是:

if(Device.RuntimePlatform == Device.iOS)
{
    var configuration = NSUrlSessionConfiguration.CreateBackgroundSessionConfiguration ("my.app.identifier");
    _client = new HttpClient (new NSUrlSessionHandler (configuration));
}
else
{
    //android codes
}

我使用这个客户端对象进行PostAsync。它适合我。

在Android上试试这个。我不确定这在iOS上是否可行。我在iOS上对此有问题。我想我对我的问题想错了。所以我问错了我的问题。在处理这个问题几个小时后,我找到了一个解决办法。不过还是要谢谢你的回答。谢谢分享。别忘了接受答案。