WebClient获取/发布到https始终超时

时间:2016-03-17 17:39:13

标签: c# xamarin webclient

我正在使用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项目中却没有。

1 个答案:

答案 0 :(得分:0)

我让它在干净的Xamarin Android项目中工作,但仅限于使用ModernHttpClient时。

但是在我的便携式类库中实现它时仍然无法正常工作。相反,将我的Web请求移动到特定平台项目使其工作!我最终使用了一个声明post方法的接口。每个平台项目都声明P​​CL正在使用的“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;
        }
    }
}