2014-02-24 34 views
6

如何將保存的代理設置和憑證用作HttpWebRequests的默認值?代理設置可以訪問和使用但不是憑證:如何在.Net應用程序中使用IE代理服務器設置及其憑據

IWebProxy proxy = WebRequest.GetSystemWebProxy(); 
proxy.Credentials = CredentialCache.DefaultNetworkCredentials; 
WebRequest.DefaultWebProxy = proxy; 

是否有使用憑據的權限?

它與通過的NetworkCredential實例傳遞憑據:

proxy.Credentials = new NetworkCredential("username", "password"); 

但我想從操作系統/ IE使用保存的。

編輯:

我使用的是第三方的lib創建並呼籲應通過代理傳遞的HttpWebRequests。這可能是問題的一部分嗎?

使用與此內容app.config文件無法正常工作或

<configuration> 
    <system.net> 
    <defaultProxy enabled="true" useDefaultCredentials="true"> 
    </defaultProxy> 
    </system.net> 
</configuration> 
+0

'CredentialCache.DefaultNetworkCredentials' *爲* NetworkCredential'的'一個實例。你有什麼問題?錯誤消息/異常? – klugerama

+0

**編輯:**沒有錯誤消息,並且上面的行中沒有例外,只是用於用戶名和密碼的空字符串。但是在嘗試通過代理進行連接時,我將收到HTTP 407代理身份驗證要求響應。 –

+0

這個應用程序作爲Windows服務運行,與控制檯或窗體等應用程序? – nagates

回答

1

由於klugerama已經建議你應該使用CredentialCache.DefaultNetworkCredentials

這包含網絡憑據即使他們似乎空

我不得不想從this後粘貼另一個答案在SO具有優異的解釋:

的的NetworkCredential從CredentialCache.DefaultCredential返回只是一個佔位符。 ...此類型的內部API檢查以查看是否應使用集成身份驗證。

所以,你應該檢查的事項是:

  • 是否真的有問題,或者你覺得有因爲缺少用戶名和密碼的?
  • 檢查哪個帳戶被用作「默認網絡憑據」(檢查憑據管理器控制面板)
+0

我通過Credential Manager控制面板添加了代理憑據,但它沒有改變任何東西。 IE也已將憑證添加到此面板並能夠使用代理。 –

1

檢查app.config(或web.config)文件,如果存在的話。如果這些代理設置都將是應用程序範圍內,然後確保你已在該文件(如有必要創建它)以下:

<configuration> 
    <system.net> 
    <defaultProxy enabled="true" useDefaultCredentials="true"> 
    </defaultProxy> 
    </system.net> 
</configuration> 

您不需要有任何東西在你的代碼;所有WebRequest實例將簡單地使用代理。

如果你的代理服務器設置將成爲應用程序範圍內,然後確保這些設置是在上述.config文件不,並確保按要求設置它們的代碼。

+1

我將此配置添加到項目中,並試圖禁用所有代理設置代碼,但它不起作用。 –

6

我也許兩個星期前有此完全相同的問題! HTTP 407錯誤。我想這兩個建議,建立網絡憑證,並添加默認的代理線的應用程序。配置,但都沒有工作。奇怪的是,因爲我沒有在去年寫的vb應用程序上遇到這個問題,他們做了完全相同的事情,出去到一個網站並以字符串的形式下載源代碼。當我做到這一點時,我遇到了這個問題,但在App.config中添加了defaultProxy行!奇怪的。

這就是我能夠解決這個問題的方法。

我不創建代理,我將默認值(從app.config中提取)分配給webRequest的代理屬性。然後我確保「UseDefaultCredentials」設置爲「true」。

HttpWebRequest request = (HttpWebRequest.Create(m.Url) as HttpWebRequest);     
       request.Proxy = WebRequest.DefaultWebProxy; 
       request.UseDefaultCredentials = true; 

我將此添加到app.config(與上面的帖子相同)。

<system.net> 
    <defaultProxy useDefaultCredentials="true"/> 
    </system.net> 

這裏是踢球者(我希望我能解釋爲什麼這解決了我的問題)。在創建請求併爲代理分配正確的憑證之後,我必須創建一個cookie容器並將其分配給我的Web請求。說真的,我不知道爲什麼這個解決了這個問題,因爲我之前不需要這樣做。

CookieContainer cc = new CookieContainer(); 
       request.CookieContainer = cc; 

我希望這可以幫助你。

下面是完整的代碼(減去的app.config線):

 HttpWebRequest request = (HttpWebRequest.Create(m.Url) as HttpWebRequest);     
     request.Proxy = WebRequest.DefaultWebProxy; 
     request.UseDefaultCredentials = true; 

     CookieContainer cc = new CookieContainer(); 
     request.CookieContainer = cc; 

     HttpWebResponse response = (request.GetResponse() as HttpWebResponse); 
0

這爲我工作。當然,你將不得不添加網址。代碼片斷 - 它是從我製作的應用程序中提取的,該應用程序將XML Soap請求和響應發送給一家公司的Web服務,這些公司的Web服務需要在其他公司的Cisco Any-Connect網絡上使用或不使用時可用。

public HttpWebRequest CreateWebRequest() 
     { 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("url"); 
IWebProxy proxy = request.Proxy; 
      if (proxy != null) 
      { 
       string proxyuri = proxy.GetProxy(request.RequestUri).ToString(); 
       request.UseDefaultCredentials = true; 
       request.Proxy = new WebProxy(proxyuri, false); 
       request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials; 
      } 
return request; 
} 

App.config文件:

<system.net> 
    <defaultProxy enabled="true" useDefaultCredentials="true"> 
    </defaultProxy> 
</system.net> 
相關問題