宁静,代理和webapi

时间:2012-11-29 20:10:26

标签: c# rest asp.net-web-api

我正在为一个公开可用的休息网络服务开发一个消费者应用程序。
我遇到两个问题:我的代理和服务认证。 我似乎无法通过我的代理,实际上我确实有一个有效的凭证,但我不知道在哪里或如何提供它!
其次,我也不知道如何应对网络服务发布的基本认证挑战...... 我可以通过浏览器使用它,但我无法在我的c#app上使用它。到目前为止,代码是:

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错误...有人可以帮忙吗?

Edit1:Web服务上的身份验证属于BASIC类型!
Edit2:clientHandler.Credentials = new NetworkCredential(“user”,“P @ ssw0rd”);不起作用...服务器返回“此请求需要HTTP身份验证”

1 个答案:

答案 0 :(得分: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;

通过这种方式设置,每当您向“Host”URI下面的任何URI发出请求时,HttpClientHandler都会自动设置正确的授权标头。

另外,请注意,有一个名为WebRequestHandler的替代处理程序可以代替HttpClientHandler,它可以添加仅在Windows操作系统上可用的额外内容,如WinINet代理和管道传输。