使用HttpWebRequest进行基本身份验证

时间:2019-04-04 07:45:38

标签: c# rest uwp webclient

我正在制作类似邮递员的应用程序,并且尝试使用HttpWebRequest来实现基本身份验证,但是我总是以403 forbidden error结尾,我想这意味着我做错了事。 / p>

我当前正在使用WebHeaderCollection存储标题。 我这样构建我的Authorization标头:

代码:

private WebHeaderCollection AddAuthorization(WebHeaderCollection wc)
    {
        if (expanderBasique.IsExpanded && !String.IsNullOrEmpty(BasiqueUserName.Text) && !String.IsNullOrEmpty(BasiquePassword.Password))
            {
                String username = BasiqueUserName.Text.Trim();
                String password = BasiquePassword.Password.Trim();
                String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
                wc.Add("Authorization", "Basic " + encoded);
            }

            return wc;
        }

然后将我的收藏链接到HttpWebRequest:

代码:

private async Task<WebResponse> ExecuteHttpWebRequest()
        {
            var selectedMethode = Methode.SelectedItem as TextBlock;
            string method = selectedMethode.Text;
            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(Query.Text);
            WebHeaderCollection myWebHeaderCollection = webRequest.Headers;
            myWebHeaderCollection = BuildHeaderCollection(myWebHeaderCollection);
            myWebHeaderCollection = AddAuthorization(myWebHeaderCollection);
            webRequest.PreAuthenticate = true;
            webRequest.Method = method;
            if (webRequest.Method == "POST" || webRequest.Method == "PUT" || webRequest.Method == "PATCH")
            {
                byte[] data = Encoding.ASCII.GetBytes(Body.Text);
                webRequest.ContentLength = data.Length;
                using (var stream = webRequest.GetRequestStream())
                {
                    stream.Write(data, 0, data.Length);
                }
            }
            return await webRequest.GetResponseAsync();
        }

我使用自己的凭据通过GitHub api尝试以下代码: https://api.github.com/user

在邮递员或restER之类的其他应用程序中,我得到了想要的结果,但是我总是自己遇到403错误。

我真的很想坚持使用HttpWebRequest。
我尝试了Stack Overflow的各种解决方案,但均未成功: Herehere

1 个答案:

答案 0 :(得分:2)

编辑:
根据FaizanRabbani的评论,我通过将UserAgent属性设置为httpwebrequest解决了该问题:

代码:

private async Task<WebResponse> ExecuteHttpWebRequest()
        {
            var selectedMethode = Methode.SelectedItem as TextBlock;
            string method = selectedMethode.Text;
            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(Query.Text);
            WebHeaderCollection myWebHeaderCollection = webRequest.Headers;
            myWebHeaderCollection = BuildHeaderCollection(myWebHeaderCollection);
            myWebHeaderCollection = AddAuthorization(myWebHeaderCollection);
            webRequest.PreAuthenticate = true;
            webRequest.Method = method;
            webRequest.UserAgent = "something";
            if (webRequest.Method == "POST" || webRequest.Method == "PUT" || webRequest.Method == "PATCH")
            {
                byte[] data = Encoding.ASCII.GetBytes(Body.Text);
                webRequest.ContentLength = data.Length;
                using (var stream = webRequest.GetRequestStream())
                {
                    stream.Write(data, 0, data.Length);
                }
            }
            return await webRequest.GetResponseAsync();
        }