为什么在没有网络连接的情况下,这个webclient发布代码没有超时



我的xamarin.ios应用程序中有这个函数,它将对象发布到我的api。该对象包含字符串和1个成员作为base64字符串。当没有连接时,我似乎无法在不到5分钟的时间内获得超时和异常。然而,当对象中没有基底64时,它似乎超时了。有什么办法让它发挥作用吗?这是我的代码:

public static string postData(object @params, string url)
{
MyWeWbClient webClient = new MyWeWbClient();

try
{

webClient.Headers["content-type"] = "application/json";
webClient.Headers.Add("Authorization", "Bearer " + Settings.GeneralSettings3);
var reqString = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(@params, Formatting.Indented));
byte[] resByte = webClient.UploadData(url, "post", reqString);
var resString1 = Encoding.Default.GetString(resByte);
webClient.Dispose();
return resString1;
}
catch (WebException ex)
{
string responseText = "";
var responseStream = ex.Response?.GetResponseStream();
if (responseStream != null)
{
using (var reader = new StreamReader(responseStream))
{
responseText = reader.ReadToEnd();
}
}
throw new Exception(responseText.ToString());
}catch(Exception ex)
{
throw;
}
}

还有我的自定义Web客户端类,这样我就可以设置超时:

public  class MyWeWbClient : WebClient
{
protected override  WebRequest GetWebRequest(Uri uri)
{
WebRequest w = base.GetWebRequest(uri);
w.Timeout = (int)TimeSpan.FromSeconds(10).TotalMilliseconds;//20 * 60 * 1000;
return w;
}
}

提前谢谢。感谢您的帮助。

编辑:

同样的代码在xamarin.android上运行得非常好,如果没有像预期的那样的互联网连接,它就会超时。

我不建议使用webClient,我会使用像restsharp这样的外部depency。

或者,您可以使用Task.Run()对其进行硬编码,但由于它是在Xamarin中,我不能说。

最新更新