Xamarin Android发布到WebAPI

时间:2016-11-01 17:46:45

标签: c# android xamarin visual-studio-2015

我有一个在服务器上运行的WebAPI服务,我能够在我拥有的MVC应用程序中整天反击它。我现在正在尝试创建一个同样针对同一个WebAPI的Xamarin Android应用程序。我把一些代码放在一个控制台应用程序中进行测试,它运行得很好。但是,当我在Xamarin Android应用程序中放入相同的代码时,它无法连接到服务,我得到了一个基本上包含WebException的聚合异常。进一步深入研究异常,似乎是System.Net.WebExceptionStatus.ConnectFailure类型的错误。

以下是代码:

 using (HttpClient webAPI = new HttpClient())
 {
        // hardcode the request to try and see why it errors
        AuthUserRequest thisUser = new AuthUserRequest
        {
            UserName = "username",
            Password = "password",
            AppName = "Dashboard"
        };

        webAPI.MaxResponseContentBufferSize = 256000;
        string json = Newtonsoft.Json.JsonConvert.SerializeObject(thisUser);
        var content = new StringContent(json, Encoding.UTF8, "application/json");

        HttpResponseMessage response;
        try
        {
            response = await webAPI.PostAsync("It'sOurURL", content);
        }
        catch (Exception err)
        {
            string sHold = err.Message;
            throw;
        }

        response.EnsureSuccessStatusCode();

        if (response.IsSuccessStatusCode)
        {
            Context thisContext = Application.Context;
            Toast toast = Toast.MakeText(thisContext, "Successful", ToastLength.Short);
            toast.Show();
        }
    }

正如我所说的那样奇怪,它在Console应用程序中运行得很好,而不是Xamarin Android应用程序。对此有何见解?

2 个答案:

答案 0 :(得分:0)

一切看起来都不错。我的API调用适用于Xamarin Android和iOS。我的代码几乎与两个真正的细微差别相同。我在PostAsync调用上设置了ConfigureAwait(false)。另外,我创建了一个URI变量,其中包含API端点的地址,并将其传递给PostAsync方法,而不是使用硬编码字符串。

using (var client = new HttpClient())
{
    var user = new CredentialsModel
    {
        Password = password,
        Username = username,
    };

    var uri = new Uri("YOUR_URL_GOES_HERE");
    var json = JsonConvert.SerializeObject(user);
    var content = new StringContent(json, Encoding.UTF8, "application/json");

    var response = await client.PostAsync(uri, content).ConfigureAwait(false);
    if (response.IsSuccessStatusCode)
    {
        var responseContent = await response.Content.ReadAsStringAsync();
        var authData = JsonConvert.DeserializeObject<ResponseModel>(responseContent);

        return authData;
    }

    return null;
}

答案 1 :(得分:-1)

这是我自己的骨头错误......当我今天早上尝试使用URL时,它就在那里,但是IT部门一直在讨论服务器,所以它不再是外部可用的。抱歉打扰每个人。