c# - 向 api 发出请求适用于 Android,但不适用于 IOS。 Xamarin

标签 c# ios xamarin xamarin.forms xamarin.ios

我一直在尝试创建一个函数来验证我的 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

还有

Fluent HTTP

关于c# - 向 api 发出请求适用于 Android,但不适用于 IOS。 Xamarin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56826492/

相关文章:

c# - 为什么我通过 C# 代码得到格式错误的契约(Contract)?

ios - 我如何获得子字符串?

iphone - 如何合并两个 mp3 文件 iOS?

visual-studio - Xamarin 是否支持用于 NuGet 的 project.json?

android - 创建选项卡并显示和隐藏 Activity 内的布局

c# - 指定的转换对泛型无效

c# - 捕获非类型的异常

c# - Windows 将数据包转发到 C# 应用程序

ios - 使用 List 属性的计数对 Realm 对象进行排序

c# - 显示隐藏的按钮