2016-09-22 90 views
1

我目前正在尝试使用Visual Studio Team Services公司提供的其他API(Visual Studio Online)来获取工作项目信息。我似乎可以连接,但是当我查看对我的查询的响应时,它带有增强型安全错误消息的html页面。我相信这是由于IE中的增强安全选项,但我从我的客户端计算机上调用了此选项,我只能看到有关如何在服务器上关闭此选项的选项。Visual Studio Team Services Rest增强的安全性错误API

这是我正在做

using (var client = new HttpClient()) 
     { 
      var token =  "xxxxxxxxxxxx"; 
      var apiVersion = "1.0"; 

      var account = "xxxxxxxx"; 
      var query = "Select [System.Id] From WorkItems Where[System.WorkItemType] = 'WorkItem' order by [System.CreatedDate] desc"; 

      var url = "https://" + account + ".visualstudio.com/Core/_apis/wit/"; 

      // Execute a query that returns work item IDs matching the specified criteria 
      using (var request = new HttpRequestMessage(HttpMethod.Post, url + "wiql")) 
      { 
       request.Headers.Add("Authorization", "Bearer " + token); 
       request.Headers.Add("Accept", "application/json;api-version=" + apiVersion); 

       Dictionary<string, string> body = new Dictionary<string, string> 
      { 
       { 
        "query", query 
        } 
      }; 

       request.Content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json"); 

       using (var response = await client.SendAsync(request)) 
       { 
        var content = await response.Content.ReadAsStringAsync(); 
        var workItems = JObject.Parse(content)["workItems"] as JArray; 

        string[] ids = workItems.Select<JToken, string>(w => (w["id"] + "")).Take(10).ToArray<string>(); 
        string idsString = String.Join(",", ids); 

        // Get details for the last 10 
        using (var detailsRequest = new HttpRequestMessage(HttpMethod.Get, url + "workitems?ids=" + idsString + "&fields=System.Id,System.Title")) 
        { 
         detailsRequest.Headers.Add("Authorization", "Bearer " + token); 
         detailsRequest.Headers.Add("Accept", "application/json;api-version=" + apiVersion); 

         using (var detailsResponse = await client.SendAsync(detailsRequest)) 
         { 
          var detailsContent = await detailsResponse.Content.ReadAsStringAsync(); 
          var detailsWorkItems = JObject.Parse(detailsContent)["value"] as JArray; 

          foreach (dynamic workItem in detailsWorkItems) 
          { 
           Console.WriteLine("Work item: {0} ({1})", 
            workItem.fields["System.Id"], 
            workItem.fields["System.Title"] 
           ); 
          } 
         } 
        } 
       } 
      } 
     } 

任何帮助,这将不胜感激,呼叫

感谢

克里斯

+0

可以共享错误或者截图? –

+0

我调用sendasync方法时的响应只是一个html页面。在检查时,它提供了严重的安全信息 – chrisblue13

+0

如果禁用Internet Explorer增强的安全配置,它是否工作? –

回答

0

可以相关网站添加到受信任网站(例如:https://app.vssps.visualstudio.com,https://login.live.com等...)。

  1. Internet选项=>安全
  2. 选择可信站点
  3. 点击网站
  4. 类型的网站地址,然后单击添加

简单的办法知道哪些URL需要添加,你可以发送简单的Get Rest请求(例如获取工作项REST API),它会弹出一个包含站点URL的窗口(将针对不同URL弹出多次),将这些URL添加到可信站点列表中。 enter image description here

更新:

基于响应结果,它是不相关的增强的安全性,该结果意味着它没有通过认证。所以令牌无效,它是OAuth的访问令牌,您需要在将您的应用注册到VSTS后获取访问令牌。

更多信息,可以参考this文章。

There是您可以参考的OAuth示例。获取访问令牌后,将其添加到请求标头并从VSTS检索数据。

如果你想通过个人访问令牌访问VSTS,这样的代码:(检查this文章)

try 
    { 
     var username = "username"; 
     var password = "password"; 

     using (HttpClient client = new HttpClient()) 
     { 
      client.DefaultRequestHeaders.Accept.Add(
       new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 

      client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", 
       Convert.ToBase64String(
        System.Text.ASCIIEncoding.ASCII.GetBytes(
         string.Format("{0}:{1}", username, password)))); 

      using (HttpResponseMessage response = client.GetAsync(
         "https://{account}.visualstudio.com/DefaultCollection/_apis/build/builds").Result) 
      { 
       response.EnsureSuccessStatusCode(); 
       string responseBody = await response.Content.ReadAsStringAsync(); 
       Console.WriteLine(responseBody); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.ToString()); 
    } 
+0

感谢您的帮助。我已将相关网址添加到受信任的网站,但它仍然无效。 – chrisblue13

+0

@ chrisblue13如果您通过Internet Explorer发送REST请求,结果如何? (https://www.visualstudio.com/en-us/docs/integrate/api/wit/work-items#by-ids) –

+0

通过浏览器正常工作。只是不通过视觉工作室。 – chrisblue13

相关问题