xamarin iOS使用HttpClient的共享项目不工作

xamarin iOS使用HttpClient的共享项目不工作,ios,xamarin,xamarin.ios,httpclient,Ios,Xamarin,Xamarin.ios,Httpclient,我有一个Xamarin android项目,它使用一个共享项目为我所有的网络服务建立,效果非常好。在那个共享项目中,我有一个类,它的方法是通过HttpClient.PostAsync()调用REST端点。我现在正在开发iOS版本,并认为只要使用我已经为android充实的相同类/方法,这将是相当轻松的,但出于某种原因,iOS不起作用 我没有遇到任何异常被抛出,只是对PostAsync()的调用似乎停止了,并且没有做任何我能告诉的事情。我还尝试了一个GetAsync()调用,结果相同……什么也没发

我有一个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;
    }
}
有没有关于下一步该去哪里的建议


tia

我在谷歌搜索了几次之后,终于把这个问题解决了。这条线正是我的问题:

我正在使用.Result调用我的登录方法;显然,这在iOS中不起作用,但奇怪的是,在安卓系统中却起作用


Sushi,感谢您在iOS Http stuff中的培训:)

a)您使用的是托管提供程序还是NSUrlSession提供程序?b) 查看设备日志中是否存在任何故障c)您的站点是否使用了自签名证书?这是我的第一个xamarin ios项目,因此我非常熟悉。1) 我不确定您所说的托管提供程序或NSUrlSession提供程序是什么意思。我刚刚在我的xamarin.ios项目中创建了一个实用程序类,我正在共享项目中调用该方法。2)如何查看设备日志?我正在iphone6物理设备上进行测试。3) 不,现在我只是调用一个http(不是https)端点。因此,由于您使用的是
http
httpclient提供程序(请参阅此设置的项目设置/iOS构建选项)和iOS上的自签名证书问题,因此不起作用。如果您正在iOS设备上调试,您可以通过应用程序输出面板或VS4M内部的设备日志面板查看设备日志。谢谢您的澄清。我现在已经明白了你所说的不同提供商的意思,我有点尴尬,因为我以前没有发现这一点(同样,这是我第一次尝试iOS操作系统……我更像是一个安卓操作系统的家伙)。我尝试了几个不同的提供程序,在managed的输出窗口中,我看到它启动了一个新线程,但我看不出任何错误。在NSUrlSession的输出窗口中,它说ATS阻止了一个cleartext HTTP资源…所以我觉得这至少更进一步了。它似乎应该在信息中看到我允许的异常。plist file right?@SushiHangover发现我在info.plist中丢失了一个键(NSExceptionAllowsInsecureHTTPLoads)。我添加了这个键,错误在输出窗口中消失了,但它在HttpClient.PostAsync()调用上仍然没有做任何事情。就像那个方法调用吞噬了我的LoginUser()中的所有内容一样方法,一切停止。
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>mysite.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true />
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false />
        </dict>
    </dict>
</dict>