我一直在尝试创建一个函数来验证我的 token ,它适用于 Android,但不适用于 IOS。我的自定义 API 在 IOS 上的响应返回 401 未经授权(当您发送无效 key 时应该如此),但我已经在 postman 中尝试了该 key ,它是有效的。
这可能与格式有关?但我不明白 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 应用程序时,由于某种原因, token 不会传递到服务器。
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);
我已检查应用程序是否发送了 token 。它在途中的某个地方消失了。
编辑:经过一些日志记录,我发现通过 IOS 发送时 token 位于 header 中,但不在授权 header 中,您如何解决此问题?
最佳答案
我通过下载 Flurl 和 Flurl.Http 插件解决了这个问题,并添加了这一行:
var result = await url.WithOAuthBearerToken(token).PostJsonAsync(jsonstring);
信用:Xamarin forms not sending Authorization header
还有
关于c# - 向 api 发出请求适用于 Android,但不适用于 IOS。 Xamarin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56826492/