0

我正在尝试向使用 BASIC 身份验证和 https 保护的服务发送 HTTP GET 请求。如果我使用 RESTClient Firefox 插件来这样做没有问题。我正在定义基本标头并将 GET 发送到 url,我得到了答案(json 中的数据)。

现在我正在使用 C# 开发一个 Windows 应用商店应用程序,该应用程序旨在使用该服务。我在清单中启用了所有必需的功能并编写了以下方法:

private async void HttpRequest()
        {
            string basic = "Basic ...........";

            Uri testuri = new Uri(@"https://...Servlet");

            HttpClient client = new HttpClient();

            client.DefaultRequestHeaders.Add("Authorization", basic);

            Task<HttpResponseMessage> response = client.GetAsync(testuri);
            var text = await response;
            var message = text.RequestMessage;
        }

我尝试了许多不同的可能性,例如获取响应字符串,但一切都导致来自服务器的 401 状态代码答案。

我看了很多类似的问题,我对通信的理解如下:客户端请求->服务器响应401->客户端发送授权标头->服务器响应200(OK)

我不明白为什么我会收到 401“未授权”状态码,尽管我一开始就发送了授权标头。如果有人知道在 RESTClient 中是如何处理的,那将会很有趣。

BASIC 标头绝对正确,我将其与 RESTClient 中的标头进行了比较。

如果有人可以帮助我,那就太好了。

在此先感谢和亲切的问候, Max

4

2 回答 2

6

遇到了类似的问题,我向 HttpClient 添加了一个 HttpClientHandler。

var httpClientHandler = new HttpClientHandler();
httpClientHandler.Credentials = new System.Net.NetworkCredential("","")
var httpClient = new HttpClient(httpClientHandler);
于 2013-06-19T12:53:41.927 回答
1

在添加到标头之前,应对凭据进行编码。我在 WPF 应用程序中对其进行了测试,它可以工作...

      string _auth = string.Format("{0}:{1}", "username", "password");
      string _enc = Convert.ToBase64String(Encoding.UTF8.GetBytes(_auth));
      string _basic = string.Format("{0} {1}", "Basic", _enc);

      HttpClient client = new HttpClient();
      client.DefaultRequestHeaders.Add("Authorization",_basic);
于 2014-03-27T06:20:38.987 回答