具有代理凭据的C#HttpWebRequest未将凭据传递给代理服务器

时间:2013-03-19 15:03:57

标签: c# proxy httpwebrequest defaultnetworkcredentials

我目前正在关注类似的事情:

 HttpWebRequest myWebRequest = (HttpWebRequest) WebRequest.Create("http://www.microsoft.com");
IWebProxy proxy = myWebRequest.Proxy;
Uri newUri = new Uri(proxyAddress);
myProxy.Address = newUri;
... (setting of username/password for proxy)
myProxy.Credentials = new NetworkCredential(username, password);
 myWebRequest.Proxy = myProxy;

HttpWebResponse myWebResponse = (HttpWebResponse) myWebRequest.GetResponse();

我正在运行IIS 7.5托管应用程序中的代码,该应用程序需要在进程继续之前验证URL是否可联系。由于该服务不应该访问外部世界,因此我需要使用具有我们IT部门提供给我的凭据的特定代理服务器。

不幸的是,无论我尝试什么(app.config中的system.net/default代理,使用关联的模块类来创建URL和凭据,或者类似上面的内容),代理服务器都不会获得这些凭据传递给它。

有什么我可能错过的吗?我已尝试在调试模式下从VS2010 Web应用程序运行此应用程序,其中应用程序从IIS运行,具有默认的应用程序池标识。并且在我们的QA环境中的服务器中没有任何变化 - 它根本不使用代理,或者只是不发送凭据。

我也尝试将PreAuthenticate = trueUseDefaultCredentials都设置为true和k,并且没有变化。

关于我缺少的任何想法?

1 个答案:

答案 0 :(得分:1)

编辑:对不起,首先误解了您的问题 - 更正了以下答案:

我会尝试创建一个新的WebProxy对象,设置其凭据,然后将其设置为您的请求的代理(而不是从请求中获取现有的代理对象并进行修改):

HttpWebRequest myWebRequest =
    (HttpWebRequest) WebRequest.Create("http://www.microsoft.com");
IWebProxy proxy = new WebProxy(proxyAddress);
string proxyUsername = @"foo";
string proxyPassword = @"bar";
proxy.Credentials = new NetworkCredential(proxyUsername, proxyPassword);
myWebRequest.Proxy = proxy;