我有一个xamarin应用程序,可从webAPI中提取数据。我检查了api地址很多次了,我确定它是正确的。当我调试代码时,我没有从服务器找到404错误。但是,当我将URL复制并粘贴到浏览器中时,得到了预期的结果。我不知道为什么我的应用返回404。
我的方法:
public async Task<ICustomerType> GetById(int id)
{
string _token;
if (App.Current.Properties.ContainsKey("token"))
{
_token = (string)App.Current.Properties["token"];
}
else
{ _token = null; }
var webApiResponse =
_connector.PostAsync(
"api/Customer/get/id/" + id,
string.Empty, _token).Result;
var response = webApiResponse.Result.ToString();
var jObjectResponse = JObject.Parse(response);
ICustomerType customerTypeObj = null;
return customerTypeObj;
}
我到HttpClient的PostAsync方法的桥接方法:
private async Task<TResponse> PostAsync(string requestPath, string
jsonContent, bool getToken, string token)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(_apiUrl);
client.DefaultRequestHeaders.Accept.Clear();
var contentType = new MediaTypeWithQualityHeaderValue("application/json");
client.DefaultRequestHeaders.Accept.Add(contentType);
if (getToken)
{
token = GetApiTokenAsync().Result;
}
if (!string.IsNullOrEmpty(token))
{
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
}
var httpContent = new StringContent(jsonContent, Encoding.UTF8, "application/json");
var response = client.PostAsync(requestPath, httpContent).Result;
var jsonData = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<TResponse>(jsonData);
}
令牌:正确
API网址:正确(我检查了调试输出中的“ /”符号。它们的位置正确。我的Api像这样: https://MyApi.net/api/Personel/get/id/1)
我的错误:
- 响应{状态代码:404,原因短语:“未找到”,版本:1.1,内容:System.Net.Http.StreamContent,标头:{请求上下文: appId = cid-v1:Some_String服务器:Kestrel
严格的运输安全性:max-age = Some_Int Set-Cookie: ARRAffinity = Some_String; Path = /; HttpOnly; Domain = MyDomain日期:星期一, 2018年7月9日7:54:19 GMT X-Powered-by:ASP.NET内容长度:0 }} System.Net.Http.HttpResponseMessage
答案 0 :(得分:0)
您在API中的方法动词为“ GET”,但您在客户端中使用了“ POST”。因此在浏览器中可以使用,因为浏览器调用了“ GET”,但在客户端中却不起作用。
代替:
var webApiResponse =
_connector.PostAsync(
"api/Customer/get/id/" + id,
string.Empty, _token).Result;
使用:
var webApiResponse =
_connector.GetAsync(
"api/Customer/get/id/" + id,
string.Empty, _token).Result;