在C#中获取请求返回401未授权

时间:2018-01-02 13:45:53

标签: c# .net http

目前正在尝试将get请求作为c#程序的一部分。该请求在Postman上正常工作,因为它使用标头进行授权。但是,我无法让程序使用该代码在其Get请求中正确使用此标头。我已经好好看看并尝试了我发现的各种代码,但还没有设法解决它,所以任何帮助都会受到赞赏!

public string Connect()
        {
            using (WebClient wc = new WebClient())
            {
                string URI = "myURL.com";
                wc.Headers.Add("Content-Type", "text");
                wc.Headers[HttpRequestHeader.Authorization] = "Bearer OEMwNjI2ODQtMTc3OC00RkIxLTgyN0YtNzEzRkE5NzY3RTc3";//this is the entry code/key 
                string HtmlResult = wc.DownloadString(URI);
                return HtmlResult;
            }
        }

上面是班级内的一种方法。 下面是另一种尝试,它是一种传递URL的扩展方法:

 public static string GetXml(this string destinationUrl)
            {
                HttpWebRequest request = 
                (HttpWebRequest)WebRequest.Create(destinationUrl);
                request.Method = "GET";
                request.Headers[HttpRequestHeader.Authorization] = "Bearer 
                OEMwNjI2ODQtMTc3OC00RkIxLTgyN0YtNzEzRkE5NzY3RTc3";

                HttpWebResponse response;
                response = (HttpWebResponse)request.GetResponse();
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    Stream responseStream = response.GetResponseStream();
                    string responseStr = new 
                    StreamReader(responseStream).ReadToEnd();
                    return responseStr;
                }
                else
                {
                    Console.Write(String.Format("{0}({1})", 
                   response.StatusDescription, response.StatusCode));
                }
                return null;
            }

1 个答案:

答案 0 :(得分:0)

我可以推荐非常方便的RestSharp软件包(在Nuget上找到它)。

它将您当前的代码转换为

public string Connect()
        {
            var client = new RestClient();
            var request = new RestRequest("myURL.com", Method.GET);
            request.AddParameter("Authorization", "Bearer OEMwNjI2ODQtMTc3OC00RkIxLTgyN0YtNzEzRkE5NzY3RTc3");
            var response = client.Execute(request);
            return response.Content;
        }

它更简洁,更容易使用(在我看来),从而减少了传递或使用错误方法的可能性。

如果您仍然无法恢复/连接数据。然后使用PostMan单击PostMan右上角的Code并选择C# (RestSharp)选项。无论生成什么,都与PostMan发送的内容完全匹配。复制一遍,你应该得到符合你的PostMan请求的数据。