HttpClient 返回 404 未找到
Posted
技术标签:
【中文标题】HttpClient 返回 404 未找到【英文标题】:HttpClient Returns 404 not found 【发布时间】:2018-12-16 20:26:28 【问题描述】:我有一个从 webAPI 提取数据的 xamarin 应用程序。我检查了很多次api地址,我确信它是正确的。当我调试我的代码时,我有来自服务器的 404 not found 错误。但是,当我将 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 Url:正确(我从调试输出中检查“/”符号。它们放置得很好。我的 Api 喜欢: https://MyApi.net/api/Personel/get/id/1)
我的错误:
响应 状态代码:404,ReasonPhrase:'未找到',版本:1.1,内容:System.Net.Http.StreamContent,标头:请求上下文: appId=cid-v1:Some_String 服务器:Kestrel 严格传输安全性:max-age=Some_Int 设置 Cookie: ARRAffinity=Some_String;Path=/;HttpOnly;Domain=MyDomain 日期:周一, 2018 年 7 月 9 日 07:54:19 GMT X-Powered-By:ASP.NET 内容长度:0 System.Net.Http.HttpResponseMessage
【问题讨论】:
【参考方案1】:您在 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;
【讨论】:
以上是关于HttpClient 返回 404 未找到的主要内容,如果未能解决你的问题,请参考以下文章
GET http://localhost:4200/resource 404(未找到)
为啥 Spring Boot 中的 REST 控制器返回 HTTP 状态 404 – 未找到