【问题标题】:Authorize SonarQube api授权 SonarQube api
【发布时间】:2018-03-22 22:32:03
【问题描述】:

我正在尝试使用 Api 通过 c# 应用程序获取某些指标的值。我的代码如下所示:

var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://myServer/api/measures/component?componentKey=myProject&metricKeys=bugs,new_bugs");
            httpWebRequest.Headers.Add("Authorization", token);
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method = "GET";
            try
            {
                var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                string result;
                using (var streamreader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    result = streamreader.ReadToEnd();
                }

                var joResponse = JObject.Parse(result);
                var measures = (JArray)joResponse["component"]["measures"];

            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }

当我将相同的 API 写入浏览器的地址框时,我得到了我寻找的结果。标头的令牌是由我的服务器生成的。但是由于某种原因,当我试图在代码中获取这个 httpwebrequest 的响应时,我发现了一个错误 401。我做错了什么?

或者,我没有使用令牌,而是尝试使用凭据:

httpWebRequest.Credentials = new NetworkCredential(name, password);

结果是一样的。

编辑:

我尝试使用标题

httpWebRequest.Headers.Add("Authorization", "Bearer " + token);

相反。这也没有成功。

【问题讨论】:

  • 你试过httpWebRequest.Headers.Add("Authorization", "Bearer " + token);(带有Bearer)

标签: c# sonarqube


【解决方案1】:

上周我遇到了这个问题,简直不敢相信自己的经历。 在“授权”标头中,您必须使用空密码对令牌进行编码,如下所示:

"Authorization", $"Basic {Convert.ToBase64String(Encoding.ASCII.GetBytes(apiKey + ":"))}"

“apiKey”后面的冒号很重要。

【讨论】:

  • 这对我有用,谢谢!我这样使用你的线索:new HttpClient().DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(token + ":"))); 其中token 设置为从 SQ 复制的令牌。
猜你喜欢
  • 2019-07-17
  • 2014-12-23
  • 2016-12-23
  • 2021-04-17
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 2018-02-17
相关资源
最近更新 更多