我使用一个共享项目为我的所有网络服务设置了一个Xamarin android项目。在该共享项目中,我有一个类,其方法是通过HttpClient.PostAsync()
调用REST端点。我现在正在研究iOS版本,并且认为只使用我已经为Android设计的相同类/方法会非常轻松但是由于某种原因,iOS无法正常工作。
我没有得到任何异常被抛出,只是对PostAsync()
的调用似乎已经死亡而且没有做任何我能说的事情。我也试过GetAsync()
调用同样的结果......没有任何反应。
以下是一些示例代码:
public class UserService
{
public async Task<UserModel> LoginUser(UserModel userModel)
{
var url = new Uri(Constants.BaseUrl + "v2api/LoginUser");
try
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string userModelString = JsonConvert.SerializeObject(userModel);
var response = await client.PostAsync(url, new StringContent(userModelString, Encoding.Default, "application/json"));
if (response.IsSuccessStatusCode)
{
userModel = JsonConvert.DeserializeObject<UserModel>(await response.Content.ReadAsStringAsync());
}
}
}
catch (Exception e)
{
string exceptionString = e.ToString();
}
return userModel;
}
}
我已将断点全部放在此处,它会转到:v ar response = await
行,但就是这样。我再也没有得到任何回报。如上所述,这适用于android项目,它只是iOS无法正常工作。我确定我忽视了一些非常简单的事情,我只是不知道它会是什么。
我尝试将其添加到我的info.plist
文件中,但它没有帮助:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>mysite.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true />
<key>NSExceptionRequiresForwardSecrecy</key>
<false />
</dict>
</dict>
</dict>
关于下一步要去哪里的建议?
TIA
答案 0 :(得分:0)
在做了一些谷歌搜索之后,我终于解决了这个问题。这个帖子是我的确切问题:https://forums.xamarin.com/discussion/17086/httpclient-postasync-doesnt-work-when-awaited
我用.Result调用我的登录方法;并且显然这在iOS中不起作用,但奇怪的是在Android中。
Sushi,感谢iOS Http教育中的教育:)