这是一个Xamarin解决方案,我遇到了这个消息标题中的错误。当然,我可以轻松确认PCL项目中的HttpClientHandler上有一个Proxy属性。而且解决方案构建没有错误。只有当我运行时,它才会在调用PCL中实例化HttpClient的方法时产生此错误(在Droid或iOS上都是如此)。请注意,它甚至没有到达该方法。错误出现在应用程序启动方法上;例如,UIApplication.Main()。
如果我注释掉处理程序并实例化不带处理程序的HttpClient,则只要我在开放互联网上就可以正常工作。但我正在尝试使其在代理后面工作。
进一步调查发现设备项目没有对System.Net.Http的引用。因此,我添加了这些引用 - 并指示Xamarin.iOS和Xamarin.Android作为包 - 但它仍然产生错误。
我不清楚错误告诉我的是什么,但我相信它意味着设备项目无法看到System.Net.Http.HttpClientHandler?
如果我注释掉处理程序并实例化不带处理程序的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);
}
}