c# - 对 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发送时在标头中但不在授权标头中,您如何解决这个问题?
解决方案
我通过下载 Flurl 和 Flurl.Http 插件解决了这个问题,并添加了这一行:
var result = await url.WithOAuthBearerToken(token).PostJsonAsync(jsonstring);
还
推荐阅读
- typescript - 使用反应表 CellPropGetter
- linux - Netcat:使用脚本测试端口是否从给定的源主机打开到使用 netcat 的远程主机
- xamarin - 有没有办法可以使用 Xamarin 表单向 Shell 选项卡区域添加左右边距?
- pyspark - 当一列中的值在另一列中时标记数据
- android - 检索访问令牌 Firebase
- java - Spring boot 2.2.0 测试:配置错误:发现@BootstrapWith 的多个声明
- javascript - 如果选择编辑,如何隐藏组件
- python - 我在特定频道的工作脚本有问题
- android - 未请求相机权限,但仍在工作
- c# - EPPlus - 如何删除数字签名