C# Xamarin Android发布到WebAPI

C# Xamarin Android发布到WebAPI,c#,android,xamarin,visual-studio-2015,C#,Android,Xamarin,Visual Studio 2015,我有一个在服务器上运行的WebAPI服务,我可以在一个MVC应用程序中全天使用它。我现在正在尝试创建一个Xamarin Android应用程序,它也可以使用相同的WebAPI。我把一些代码放在一个控制台应用程序中进行测试,它工作得很好。然而,当我在Xamarin Android应用程序中放入相同的代码时,它无法连接到该服务,我得到一个聚合异常,它基本上封装了一个WebException。进一步深入研究异常,它似乎是System.Net.WebExceptionStatus.ConnectFail

我有一个在服务器上运行的WebAPI服务,我可以在一个MVC应用程序中全天使用它。我现在正在尝试创建一个Xamarin Android应用程序,它也可以使用相同的WebAPI。我把一些代码放在一个控制台应用程序中进行测试,它工作得很好。然而,当我在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();
        }
    }

正如我所说的,它在控制台应用程序中运行得很好,而不是Xamarin Android应用程序。对此有什么见解吗?

看起来都不错。我的API调用在Xamarin Android和iOS中工作。我的代码基本相同,但有两个真正的细微差别。我已在PostSync呼叫上设置ConfigureWait(false)。此外,我还创建了一个带有API端点地址的URI变量,并将其传递到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;
}
使用(var-client=new-HttpClient())
{
var user=新的凭证模型
{
密码=密码,
用户名=用户名,
};
var uri=新uri(“你的URL在这里出现”);
var json=JsonConvert.SerializeObject(用户);
var content=newstringcontent(json,Encoding.UTF8,“application/json”);
var response=await client.PostAsync(uri,内容).ConfigureAwait(false);
if(响应。IsSuccessStatusCode)
{
var responseContent=await response.Content.ReadAsStringAsync();
var authData=JsonConvert.DeserializeObject(responseContent);
返回authData;
}
返回null;
}

这是我自己的错误。。。当我今天早上尝试这个URL时,它就在那里,但是it部门一直在摆弄服务器,所以它在外部不再可用。很抱歉给大家带来麻烦。

你能从设备/模拟器浏览器连接到url吗?不能连接到特定的url,因为它需要一个json对象发布到它,但在同一个控制器中有一个get方法,我可以通过手机浏览器很好地点击它。我已经检查了网址,今天早上还可以,但是现在不管什么原因它都不可用了。啊。。。请不要介意这个问题。。。