代码之家  ›  专栏  ›  技术社区  ›  sgmoore

正在删除过时的WebProxy.GetDefaultProxy()引用

  •  3
  • sgmoore  · 技术社区  · 16 年前

    我有一些代码让我很恼火,因为它生成了过时的警告,但我对删除它很谨慎,因为:

    A)它工作

    b)我没有写

    c)我目前没有测试它的方法。(例如,我不能在需要的地方使用机器)

    代码如下

    System.Net.WebProxy proxyObject = System.Net.WebProxy.GetDefaultProxy();
    proxyObject.Credentials = System.Net.CredentialCache.DefaultCredentials;
    proxyObject.BypassProxyOnLocal = true;
    System.Net.GlobalProxySelection.Select = proxyObject;
    

    警告消息是

    警告31“system.net.globalProxySelection”已过时:“此类已被弃用。”请改用webrequest.defaultwebproxy访问和设置全局默认代理。使用“null”而不是GetEmptyWebProxy。 http://go.microsoft.com/fwlink/?linkid=14202

    但是,如果我的理解是正确的(假设程序试图访问的Web服务永远不会是本地的),我真正应该做的是删除这四行?

    这是正确的,还是漏掉了什么?

    另外,我知道可能有一个pragma选项可以忽略这个警告,但我不想走这条路。

    1 回复  |  直到 9 年前
        1
  •  3
  •   Rob Levine    16 年前

    是的我 认为 你是对的。

    测试这个的一个好方法是 Fiddler 因为它所做的一件事(除了跟踪HTTP请求)是自动将自己设置为IE代理。

    如果您运行小提琴,然后运行下面的代码

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://news.bbc.co.uk");
     //request.Proxy = null; // uncomment this to bypass the default (IE) proxy settings
     HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
     Console.WriteLine("Done - press return");
     Console.ReadLine();
    

    您将看到,在代码中没有显式的代理重写(如“我真正应该做的只是删除这四行”),请求确实从IE中获取了全局默认代理,而您 请在“小提琴手”中查看您的请求。

    只有在取消对空代理分配的注释时,请求才会绕过全局代理设置,而不会出现在fiddler中。

    所以是的-我认为您是对的;对于默认代理,您可以删除显式代理代码。