【发布时间】:2019-07-01 17:50:06
【问题描述】:
我一直在尝试创建一个验证我的令牌的函数,它适用于 Android,但不适用于 IOS。我的自定义 API 对 IOS 的响应返回未经授权的 401(当您发送无效密钥时应该这样做),但我已经在邮递员中尝试过该密钥并且它是有效的。
也许这与格式有关?但我看不出安卓和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发送时在标头中但不在Authorization标头中,您如何解决这个问题?
【问题讨论】:
-
如果你控制了服务器,你需要比较Android和iOS的请求来判断有什么区别
-
您是否使用 http 我们的 https 请求顺便说一句?
-
@BrunoCaceiro https
-
你是什么意思-令牌在标头中但不在授权标头中?
-
@shanranm 当我调用 $headers = apache_request_headers();令牌在那里,但不在我正在寻找的 $headers['Authorization'] 中。
标签: c# ios xamarin xamarin.forms xamarin.ios