首页 > 解决方案 > 对 api 的发布请求适用于 Android,但不适用于 IOS。赛马林

问题描述

我一直在尝试创建一个验证我的令牌的函数,它适用于 Android,但不适用于 IOS。来自我的自定义 API 的 IOS 响应返回 401 未授权(当您发送无效密钥时应该这样做),但我已经在邮递员中尝试过该密钥并且它是有效的。

也许这与格式有关?但是我看不出Android和IOS之间有什么区别。

一些代码:

public async Task<T> PostResponse<T>(string weburl, string jsonstring) where T : class
    {
        var Token = App.TokenDatabase.GetToken();
        string ContentType = "application/json";
        var token = string.Format("Token token={0}", Token.access_token);
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);

        try
        {
            var result = await client.PostAsync(weburl, new StringContent(jsonstring, Encoding.UTF8, ContentType));
            if(result.StatusCode == System.Net.HttpStatusCode.OK)
            {
                var JsonResult = result.Content.ReadAsStringAsync().Result;
                try
                {
                    var ContentResp = JsonConvert.DeserializeObject<T>(JsonResult);
                    return ContentResp;
                }
                catch { return null; }

            }

        }
        catch { return null;  }
        return null;
    }

我在服务器端创建了一些日志,当我运行 IOS 应用程序时,令牌由于某种原因没有传递到服务器。

PHP代码:

$token = null;
$headers = apache_request_headers();
if(isset($headers['Authorization'])){
  $matches = array();
  preg_match('/Token token=(.*)/', $headers['Authorization'], $matches);
  if(isset($matches[1])){
    $token = $matches[1];
  }
} 

file_put_contents('../config/log.txt', $token);

我已检查该应用程序是否发送了令牌。它在途中的某个地方消失了。

编辑:经过一些记录后,我发现令牌在通过IOS发送时在标头中但不在授权标头中,您如何解决这个问题?

标签: c#iosxamarinxamarin.formsxamarin.ios

解决方案


我通过下载 Flurl 和 Flurl.Http 插件解决了这个问题,并添加了这一行:

 var result = await url.WithOAuthBearerToken(token).PostJsonAsync(jsonstring);

信用:Xamarin 表单未发送授权标头

流畅的 HTTP


推荐阅读