向api发送请求适用于Android,但不适用于IOS。Xamarin

博内鲁

我一直在尝试创建一个验证令牌的函数,该函数适用于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发送时位于标头中,而不位于授权标头中,您如何解决此问题?

博内鲁

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

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

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

流利的HTTP

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

React Native HTTPS Api 调用适用于 IOS,但不适用于 Android

API 请求适用于 cURL 但不适用于 Guzzle?

Android:代码适用于 api 19 但不适用于 api 24

Ionic-开机画面适用于iOS,但不适用于Android

jQuery 提交方法适用于 Android 但不适用于 iOS

window.open(“ sms:...”)适用于android,但不适用于ios

进度条适用于Android API 23,但不适用于21或22

Xamarin Tap事件不适用于iOS,但适用于Android

Axios 标头适用于 Django GET 请求,但不适用于 PUT 请求

适用于 PHP 但不适用于脚本

React Native Android:请求适用于 android 模拟器,但不适用于 Play Store 构建

RESTful API 请求适用于 Python 和浏览器,但不适用于 VB.Net

对外部 API 的 HTTP 请求适用于 .NET,但不适用于 React(CORS 问题)

Google Analytics API请求适用于失眠/邮递员,但不适用于网络应用

Curl 请求适用于控制台,但不适用于 PHP

POST请求适用于Postman,但不适用于Python

POST请求适用于Postman,但不适用于axios或.fetch()

proxyPass适用于浏览器,但不适用于网络请求

PHP - GET 请求适用于 Postman,但不适用于 cUrl

VSCode中的Flutter beta热重装适用于Web,但不适用于iOS和Android(适用于Android Studio)

intent.getParcelableExtra()适用于API 23,但不适用于API 25

AllowAnyMethod适用于某些API调用,但不适用于其他API调用

Android 5.0 android:elevation适用于View,但不适用于Button?

docker 子域 api.localhost 适用于 chrome 但不适用于终端

API适用于Postman,但不适用于浏览器

Particle Photon API:获取客户令牌适用于 Postman 但不适用于 axios

googlemaps api适用于python终端,但不适用于脚本

对Web-api的ajax调用适用于GET,但不适用于POST

API适用于Java应用程序,但不适用于JavaFX