1

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

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:网络服务上的身份验证属于 BASIC 类型!
Edit2: clientHandler.Credentials = new NetworkCredential("user", "P@ssw0rd"); 不起作用...服务器返回“此请求需要 HTTP 身份验证”

4

1 回答 1

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,它添加了仅在 Windows 操作系统上可用的额外内容,如 WinINet 代理和流水线。

于 2012-11-30T21:41:54.587 回答