2012-11-29 30 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