我有一个在服务器上运行的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应用程序。对此有何见解?
答案 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部门一直在讨论服务器,所以它不再是外部可用的。抱歉打扰每个人。