Xamarin iOS模拟器无法连接到Rest API

时间:2015-07-12 10:01:43

标签: xamarin xamarin.mac

我正在尝试在Visual Studio 2013中设置一个Xamarin项目(第一次)。

我正在为我的API使用者类使用可移植类库,其中(以及其他方法)包含这样的GET方法:

    private static async Task<string> Get(string endpoint)
    {

        try
        {
            var client = new HttpClient();
            client.BaseAddress = new Uri(API_URL);
            client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json"));
            var response = client.GetAsync(endpoint).Result;
            string content = await response.Content.ReadAsStringAsync();
            return content;
        }
        catch (Exception ex)
        {
            var t = ex.Message;
        }

        return null;
    }

API在Azure上的公共服务器上设置。我已经从Web项目测试了API;它工作得很好。 然而,当我通过我的Mac上的VS13和Xamarin Build主机运行iOS应用程序时,我在尝试连接到API时遇到异常(使用可移植类库中的excat相同方法)。例外是:

  

System.Net.WebExceptionStatus.ConnectFailure

没有进一步说明。 我已经测试过可以从作为构建主机的Mac访问API,这让我想知道,如果有一些条件通过iOS应用程序连接到API,我不知道。

我没有任何体验应用程序的经验,这是我的第一次尝试。就像我说的;当通过Web项目访问时,API工作得很好。我在这里错过了什么?

3 个答案:

答案 0 :(得分:1)

根据迈克尔对我之前response的评论,似乎解决方案是调整您的OS X防火墙,可能与此相关问题相同:How do I get the Mac OS X Firewall to permanently allow my iOS app?

答案 1 :(得分:0)

您是否检查过是否可以连接其他任何服务?也许尝试谷歌举例。如果它不起作用,那么我也会检查:

var response = client.GetAsync(endpoint).Result;
因为这件事也可能是麻烦制造者。如果处理异步任务,你不应该像那样使用它们,而是等待它们(因此得到结果):

var response = await client.GetAsync(endpoint);

答案 2 :(得分:0)

从完整的.net框架中使用 System.net.Http.HttpClient 似乎是你的问题。如您所见,它会在您引用该程序集时减少项目的目标。

System.net.http reference

您最好使用HttpWebRequest作为基类库(BCL)的一部分,并且可以使用Android / iOs / WinPhone。

试试这个:

<div class="col-sm-2">
                <ul class="nav nav-pills nav-stacked nav-static"> <!--stacked untuk jadi vertical -->
                    <li class="active"><a>Create Case</a></li>
                    <li><a href="wf-listofcase.php">List of cases</a></li>
                    <li><a href="linksofapps.html">Links of Apps</a></li>
                </ul>
    </div>

此处还有一些关于使用 HttpClient 的问题的信息:http://forums.xamarin.com/discussion/7719/using-httpclient

我希望有所帮助。而且我也没有多少经验,所以不要把任何事情视为理所当然: - )