2012-11-29 33 views
1

我正在開發一個公共的可用的休息web服務的消費者應用程序。
我遇到2個問題:我的代理和服務認證。
我似乎無法通過我的代理,實際上我有一個有效的憑據,但我不知道在哪裏或如何提供它!
第二,我也不知道如何響應web服務發出的基本身份驗證挑戰...
我可以通過瀏覽器使用它,但我不能讓它工作在我的c#應用程序。繼承人的代碼至今:
Restful,Proxy和webapi

HttpClient cli = new HttpClient(); 
cli.BaseAddress = new Uri("http://myserver.com/");    
HttpResponseMessage response = cli.GetAsync("api/service1").Result; 

textBox1.Text = response.Content.ReadAsStringAsync().Result; 

結果在TextBox1中至今始終是一個407錯誤...誰能幫助?

編輯1:在webservice上的認證是BASIC類型!
Edit2:clientHandler.Credentials = new NetworkCredential(「user」,「P @ ssw0rd」);不起作用...服務器返回「此請求需要HTTP身份驗證」

回答

3

需要在HttpClientHandler對象上配置代理信息,該對象可以傳遞到HttpClient構造函數中。

var clientHandler = new HttpClientHandler(); 
clientHandler.Proxy = new WebProxy("http://proxyserver:80/",true); 
var httpClient = new HttpClient(clientHandler); 

憑據我做這樣的事情......

var clientHandler = new HttpClientHandler() {PreAuthenticate = true}; 

    var credentialCache = new CredentialCache(); 
    credentialCache.Add(new Uri(Host), "Basic", new NetworkCredential(userName, password)); 
    clientHandler.Credentials = credentialCache; 

通過這種方式,每當你做出任何URI請求是下面的「主機」 URI設置此功能,HttpClientHandler會自動設置正確的授權標題。

另外,請注意,有一個名爲WebRequestHandler的替代處理程序可以用來代替HttpClientHandler,它可以添加額外的東西,這些東西只能在WinINet代理和Pipelining之類的Windows操作系統上使用。

+0

適用於代理服務器!服務器驗證部分的任何線索? – Leonardo