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(未找到)

c# 远程服务器返回错误: (404) 未找到。

为啥 Spring Boot 中的 REST 控制器返回 HTTP 状态 404 – 未找到

Spring Boot /actuator 返回 404 未找到

未找到 HTTP POST 404

Spring MVC + Eclipse:HTTP 404 – 未找到