如何在C# Windows Store应用程序中获取新的默认WebProxy对象?

8
我的问题源于我在企业网络中发现的一个问题。我正在使用Windows 8进行开发,因此我的IE10被设置为自动检测代理设置。
在我的C#应用程序中,我使用System.Net.Http.HttpClient。我发现,如果我离线、发出失败请求然后重新联网,整个进程的默认IWebProxy对象将变得无法使用。重要的是要发出一个失败的请求,否则就没有问题。以下是如何获取这个脆弱代理对象的示例。
var defaultHandler = new HttpClientHandler();
var fragileProxy = defaultHandler.Proxy;
var httpClient = new HttpClient(defaultHandler);

经过一些实验,我发现可以通过调用System.Net.WebProxy.GetDefaultProxy()获得一个可用的代理。

然后我实现了一个NetworkChangAwareProxy:IWebProxy。没错,是为我的IWebProxy实现的代理。内部只是在NetworkChange.NetworkAddressChanged时获取一个新的WebProxy.GetDefaultProxy()。

当应用程序启动时,我将其连接起来,问题就解决了。

WebRequest.DefaultWebProxy =  new NetworkChangeAwareProxy();

希望有人能告诉我更好的解决方法。我的具体问题是关于应用商店风格的应用程序(metro应用)。

System.Net.WebProxy.GetDefaultProxy()不可用,而System.Net.HttpWebRequest.DefaultWebProxy在离线后返回相同的无效代理。在C# Windows Store应用程序中,如何获取新的IWebProxy对象句柄?


你是否在重复使用同一个 WebRequest 对象? - Stefan Rusek
2个回答

2

0

您可以使用网络请求来获取代理:

var req = WebRequest.Create(@"api/stat/stats/");
req.Proxy = WebRequest.GetSystemWebProxy();
req.Timeout = 10000;
req.Method = "GET";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接