Xamarin HTTPClient 突然无法获取/发布

Posted

技术标签:

【中文标题】Xamarin HTTPClient 突然无法获取/发布【英文标题】:Xamarin HTTPClient suddenly not GET/POSTing 【发布时间】:2017-03-08 13:25:07 【问题描述】:

潜伏好久,第一次问

所以我有一些代码可以正常运行很长时间(它是核心功能,所以我知道它很好)。我最近格式化了我的电脑,随着时间的推移,它可以理解地重置我所有的自定义配置。现在突然之间,我的 HTTPClient 代码根本不会 GET 或 POST,除非我破坏了 Async 功能——甚至破坏了其他东西。我让它运行,客户端最终超时。

代码在下面的hClient.GetStringAsync()hClient.PostAsync() 行中消失了 - 正如我所提到的,它已经好将近 2 年了,只是突然决定按照格式死掉。感谢所有帮助!

背景:这是一个 Xamarin PCL 项目,面向所有平台 - 目前正在针对 UWP 进行测试。在 VS2015 和 VS2017 上都有同样的问题。之前用的是VS2015。

有问题的代码:

public async Task<string> Getter(string uriToPass, string propertyToParse = "", string parent = "", int index = 0)

    var uri = new Uri(uriToPass);
    var response = await hClient.GetStringAsync(uri);
    string valToReturn = propertyToParse == "" ? response : JsonVal(response, propertyToParse, parent);
    dbg(propertyToParse + ": " + valToReturn);
    return valToReturn;


public async Task<string> Poster(string uriToPass, Dictionary<string, string> valsToPass, string propertyToParse = "", string parent = "", int index = 0)

    var response = await hClient.PostAsync(uriToPass, new FormUrlEncodedContent(valsToPass)).ConfigureAwait(false);
    string valToReturn;
    if (propertyToParse == "")
    
        valToReturn = await response.Content.ReadAsStringAsync();
    
    else
    
        valToReturn = JsonVal(response.Content.ReadAsStringAsync().ToString(), propertyToParse, parent);
    
    dbg(propertyToParse + ": " + valToReturn);
    return valToReturn;

调用上述两个函数的示例代码是:

this.authToken = await this.sM.Getter(this.MethodBuilder("auth.gettoken"), "token");
string response = await this.sM.Poster(this.MethodBuilder("auth.getMobileSession", true, vP, true), vP);

所以我现在已经将ConfigureAwait(false); 用于我的Getter 函数——并且现在可以正确地进行HTTP 调用。 但是它仍然没有从我上面的第一行 authTokenresponse

编辑:原来我的代码中有一个拦截器——我的一个***函数依赖于this.VARIABLE = sM.Getter().Result()。删除它最终解决了我的问题。感谢大家的帮助!

【问题讨论】:

你是什么意思“垂死”。你得到的响应消息和响应状态码是什么?有什么例外? 你试过fiddler吗? 你如何调用这些方法?显示该代码。看起来你陷入了僵局。 Jinish:就像它一样,它只是锁定了 - 查看我的分析器显示正确的 URI 已通过并正在处理中。没有例外或响应消息/代码 - 代码只是......挂起。我的分析器也没有显示在该行之后进行的任何进一步调用 Ben:看看它是否真的在调用 URI?还没有 DavidG:编辑我的帖子 仍然习惯 SO,为上面的格式道歉 - 没有意识到它不会在 cmets 中拆分行 【参考方案1】:

原来我的代码中有一个拦截器——我的一个***函数依赖于this.VARIABLE = sM.Getter().Result();。删除它最终解决了我的问题。感谢大家的帮助!

【讨论】:

以上是关于Xamarin HTTPClient 突然无法获取/发布的主要内容,如果未能解决你的问题,请参考以下文章

突然无法更改 HttpClient 上的超时

HttpClient 不可用共享库项目 Xamarin

Xamarin HttpClient:TaskCancelledException

Xamarin - 在 .Net 标准库中使用 httpClient

在 HttpClient 异常上显示 AlertDialog (Xamarin Android)

从Xamarin Forms请求Web API中的JWT时获取错误请求