【问题标题】:HttpClient Returns 404 not foundHttpClient 返回 404 未找到
【发布时间】: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

【问题讨论】:

    标签: xamarin httpclient


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多