【问题标题】:C# Windows Store App HTTPClient with Basic Authentication leads to 401 "Unauthorized"具有基本身份验证的 C# Windows Store App HTTPClient 导致 401“未经授权”
【发布时间】:2013-05-24 16:05:09
【问题描述】:

我正在尝试向使用 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 中的标头进行比较。

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

提前致谢和亲切的问候, 最大

【问题讨论】:

  • 有趣...经过多次尝试,我终于找到了我不太了解的解决方案。使用 CredentialCache 而不是自己的 auth-header 或标准 Credential-class 解决了这个问题。

标签: c# basic-authentication dotnet-httpclient http-status-code-401


【解决方案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);

【讨论】:

  • 我不喜欢挑剔,但它只是编码,而不是加密。
【解决方案2】:

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

var httpClientHandler = new HttpClientHandler();
httpClientHandler.Credentials = new System.Net.NetworkCredential("","")
var httpClient = new HttpClient(httpClientHandler);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 2014-08-24
    相关资源
    最近更新 更多