我正在使用Xamarin开发移动应用程序。该应用程序正在使用API,该API最近使用HTTPS而不是HTTP发布了新版本。更改URL以使用HTTPS并添加atuhorization标头时,请求会卡住并最终超时。例如,在Postman中进行测试时,API调用可以正常工作。
所有API调用都是从便携式库中调用的,我在物理设备上运行该应用程序。
任何人对我能做些什么来解决这个问题都有任何想法?
这是我用来将数据发布到API的代码:
private async Task<HttpResponseMessage> PostData(HttpContent content, string authKey)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", authKey);
client.Timeout = new TimeSpan(0, 0, 25);
var response = await client.PostAsync(BaseUrl, content);
return response;
}
}
修改
我尝试了很多不同的解决方案,设置标题,内容类型等等但没有任何效果。我尝试过使用HttpWebRequest代替HttpClient,但没有成功。
我已经设置了一个C#控制台应用程序并创建了一个新的干净的Xamarin Android项目。一切都在控制台应用程序中工作,但在Xamarin项目中却没有。
答案 0 :(得分:0)
我让它在干净的Xamarin Android项目中工作,但仅限于使用ModernHttpClient时。
但是在我的便携式类库中实现它时仍然无法正常工作。相反,将我的Web请求移动到特定平台项目使其工作!我最终使用了一个声明post方法的接口。每个平台项目都声明PCL正在使用的“PostHandler”。
public interface IPostHandler
{
Task<HttpResponseMessage> BeginPost(HttpContent content, string requestUri);
}
public class AndroidPostHandler : IPostHandler
{
public async Task<HttpResponseMessage> BeginPost(HttpContent content, string requestUri)
{
using (var client = new HttpClient(new NativeMessageHandler()))
{
var response = await client.PostAsync(baseUrl, content);
return response;
}
}
}