【发布时间】:2016-05-25 16:02:00
【问题描述】:
我正在创建 Xamarin Forms 概念证明,但在发布到我的休息服务时遇到了一些问题。 REST 服务是使用 OAuth Bearer Tokens 的 Web API 2 Rest 服务。我通过 https 使用有效的 SSL 证书运行它。
我可以在设备上很好地获取令牌,但是,使用 Bearer 令牌授权标头发布会导致
System.Net.WebException:无法解析响应。
如果我省略了授权标头,由于身份验证,请求在服务器上失败。如果我包含它,则请求永远不会发送到服务器(使用 charles 代理进行验证)。
“rest 客户端”是一个简单的 HttpClient 包装器,以 ModernHttpClient 作为提供者,在 PCL 中定义。 “rest 客户端”在控制台应用程序中运行良好。我想我在 iOS 中看到了与身份验证标头相关的较低级别的异常...
这就是我在 PCL 中构建 HttpClient 的方式:
Client = new HttpClient(new NativeMessageHandler());
Client.MaxResponseContentBufferSize = 256000;
Client.BaseAddress = new Uri("https://rest-dev.mysub.mydomain.com");
Client.DefaultRequestHeaders.Accept.Clear();
Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Authentication.AuthorizationToken); // Authentication is where I store the token
然后我发布模型:
var strContent = JsonConvert.SerializeObject(model);
var content = new StringContent(strContent, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync($"api/devices", content);
所有这些都包含在使用相同 PCL 发布到服务器的测试应用程序中。
不确定这是否重要,但如果确实如此,在 Xamarin Forms PCL 中,这将在登录时的新命令中调用(在获取令牌之后)。
无论是在 iOS 模拟器还是在我的设备上运行,我都会遇到同样的错误。
我发现有趣的是,当我不使用 ModernHttpClient 作为提供程序时,我在尝试获取令牌时收到不同的错误:
“System.Net.WebException:错误:SendFailure(写入标头错误)”
对此的研究引导我走上了设置有效 SSL 的道路。
我们将不胜感激任何正确方向的帮助。我的 google-fu 在墙上。
更新
我想我正在解决这个问题,它与 SSL 证书有关。我使用了 Charles Proxy 并让它安装了它的证书来调试连接,它才开始工作。但是,如果不使用 Charles Proxy,仍然无法工作。
【问题讨论】:
标签: ios rest xamarin xamarin.ios xamarin.forms