系统.缺少方法异常方法 'System.Net.Http.HttpClientHandler.set_Proxy' 找不到



这是Xamarin解决方案,我在此消息的标题中发现了错误。当然,我可以轻松地确认PCL项目中的HTTPClientHandler上有一个代理属性。解决方案构建没有错误。只有当我运行时,它会产生此错误(在Droid或iOS上),并且在调用PCL中实例化HTTPCLEINT的方法的点进行。请注意,它甚至没有使用该方法。该错误出现在应用程序启动方法上;例如,uiapplication.main()

如果我在没有处理程序的情况下评论处理程序并实例化httpclient,那么只要我在开放式互联网上就可以正常工作。但是我试图使该工作从代理后面工作。

进一步的调查表明,设备项目没有引用System.net.http。因此,我添加了这些 - 并指示Xamarin.ios和Xamarin.android作为软件包 - 但仍会产生错误。

我不清楚错误告诉我什么,但我相信这意味着设备项目无法看到system.net.http.httpclienthandler?

    private HttpClient GetHttpClient()
    {
        WebProxy proxy = new WebProxy(ProxyConfig.Url)
        {
            Credentials = new NetworkCredential(ProxyConfig.Username, ProxyConfig.Password)
        };
        // At runtime, when GetHttpClient is invoked, it says it cannot find the Proxy setter
        HttpClientHandler handler = new HttpClientHandler
        {
            Proxy = proxy,
            UseProxy = true,
            PreAuthenticate = true,
            UseDefaultCredentials = false,
        };
        HttpClient client = new HttpClient(handler);
        // This works when not behind a proxy
        //HttpClient client = new HttpClient();
        return client;
    }
    public async Task GetWeatherAsync(double longitude, double latitude, string username)
    {
        // MissingMethodException is thrown at this point
        var client = GetHttpClient();
        client.BaseAddress = new Uri(string.Format("http://api.geonames.org/findNearByWeatherJSON?lat={0}&lng={1}&username={2}", latitude, longitude, username));
        try
        {
            var response = await client.GetAsync(client.BaseAddress);
            if (response.IsSuccessStatusCode)
            {
                var JsonResult = response.Content.ReadAsStringAsync().Result;
                var weather = JsonConvert.DeserializeObject<WeatherResult>(JsonResult);
                SetValues(weather);
            }
            else
            {
                Debug.WriteLine(response.RequestMessage);
            }
        }
        catch (HttpRequestException ex)
        {
            Debug.WriteLine(ex.Message);
        }
        catch (System.Net.WebException ex)
        {
            Debug.WriteLine(ex.Message);
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message);
        }
    }

也将 Microsoft.Net.Http nuget软件包添加到您的平台项目。如果您遇到添加此问题的问题,请尝试先安装最新的Microsoft.Bcl.Build软件包。然后,安装了此之后,添加HTTP软件包。

最新更新