c# WebClient DownloadStringAsyn c Basi c 401 Несанкционированный - PullRequest
0 голосов
/ 21 апреля 2020

Когда я использую этот код, он работает хорошо

        string userpass = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("35984281:#tYcl#8F"));
        WebClient web = new WebClient();
        web.Headers[HttpRequestHeader.Authorization] = string.Format("Basic {0}", userpass);
        var response = web.DownloadString("<some url>");
        Console.WriteLine(response);

Однако, когда я использую DownloadStringAsyn c с этим кодом, сервер возвращает 401 Unauthorized.

        try
        {

            WebClient web = new WebClient();
            web.Credentials = new NetworkCredential("35984281", "#tYcl#8F");
            string userpass = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("35984281" + ":" + "#tYcl#8F"));
            web.Headers[HttpRequestHeader.Authorization] = "Basic " + userpass;
            //web.Headers.Add("Authorization", userpass);

            //CredentialCache userpassCache = new CredentialCache();
            //userpassCache.Add(new Uri(<some url>), "Basic", new NetworkCredential("35984281", "#tYcl#8F"));

            web.DownloadStringCompleted += (s, evt) =>
            {
                if (!evt.Cancelled && evt.Error == null)
                {
                    tboxQueryResponse.Invoke((MethodInvoker)delegate
                    {
                        tboxQueryResponse.AppendText(evt.Result + Environment.NewLine);
                        tboxQueryResponse.SelectionStart = 1;
                        tboxQueryResponse.ScrollToCaret();
                    });
                    Console.WriteLine(evt.Result);
                }
                else
                {
                    Console.WriteLine(evt.Error.Message);
                }

            };
            web.DownloadStringAsync(new Uri("<some url>"));
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

Как вы можете видеть в закомментированной строке, я пробовал много попыток, но до сих пор не прошел проверку подлинности. Сервер основан на Linux и использует аутентификацию Basi c. Как и в первой строке кода, он получает ответ, однако, когда я использую DownloadStringAsyn c, он не может быть аутентифицирован. Я ценю помощь.

...