{"id":263,"date":"2014-12-04T00:15:41","date_gmt":"2014-12-04T00:15:41","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2014\/12\/04\/getting-started-with-cloud-based-load-test-rest-apis\/"},"modified":"2022-05-26T01:50:08","modified_gmt":"2022-05-26T09:50:08","slug":"getting-started-with-cloud-based-load-test-rest-apis","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/devops\/getting-started-with-cloud-based-load-test-rest-apis\/","title":{"rendered":"Getting started with Cloud-based Load Test REST APIs"},"content":{"rendered":"<p>REST API\u2019s are pretty cool, enabling you to do things like write your own custom reports, write your own interfaces and of course integrating load tests into your build.\u00a0<\/p>\n<p>Looking at the <a href=\"https:\/\/code.msdn.microsoft.com\/Cloud-Load-Testing-API-b333e778\" target=\"_blank\" rel=\"noopener\">sample<\/a> referenced with our <a href=\"http:\/\/www.visualstudio.com\/en-us\/integrate\/reference\/reference-vso-clt-overview-vsi\" target=\"_blank\" rel=\"noopener\">REST API documentation<\/a>; at 400 lines to demonstrate 4 API\u2019s I must admit I found it pretty daunting so I thought I would see if I could simplify that somewhat.<\/p>\n<p>Just like the documentation indicates: the first place you want to start is to enable <a href=\"http:\/\/www.visualstudio.com\/en-us\/integrate\/get-started\/get-started-auth-introduction-vsi\">alternate credentials<\/a>.\u00a0 This is done by opening your user profile from Visual Studio Online.\u00a0<\/p>\n<p><img decoding=\"async\" title=\"image\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/12\/1261.image_thumb_2DD50F84.png\" width=\"377\" height=\"251\" \/><\/p>\n<p>And enabling alternative credentials.<\/p>\n<p><img decoding=\"async\" title=\"image\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/12\/4401.image_thumb_5B562F47.png\" width=\"382\" height=\"317\" \/><\/p>\n<p>\u00a0<\/p>\n<p>At this point we are ready to start writing a sample!<\/p>\n<p>Since the goal of this demo is to keep it simple I decided to use ASP.NET and let it handle all the Async goo.\u00a0<\/p>\n<p>\u00a0<\/p>\n<p><img decoding=\"async\" title=\"image\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/12\/4745.image_thumb_7DADC4C0.png\" width=\"320\" height=\"223\" \/><img decoding=\"async\" title=\"image\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/12\/7558.image_thumb_7D4191CB.png\" width=\"297\" height=\"223\" \/><\/p>\n<p>To do this all you need to do is set the property Async=\u201dTrue\u201d on the page(see below).\u00a0\u00a0<\/p>\n<p>While on the page I also tossed on a Textbox to display the result of the REST calls.<\/p>\n<p><img decoding=\"async\" title=\"image\" style=\"border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/12\/0068.image_thumb_54398380.png\" width=\"461\" height=\"288\" \/><\/p>\n<p>Here is the markup for that page:<\/p>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n  <font face=\"Consolas\"><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\"><\/font><\/span><\/font>\n<\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><font style=\"background-color: #ffff00\"><\/font><font style=\"font-size: 9.5pt\"><%<\/font><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#0000ff\">@<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#800000\">Page<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#ff0000\">Language<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">=&#8221;C#&#8221;<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#ff0000\">AutoEventWireup<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">=&#8221;true&#8221;<\/font><\/span><span style=\"font-family:;color:\"> <\/span><\/font><font style=\"background-color: #ffff00\"><span style=\"font-family:;color:\"><font color=\"#ff0000\">async<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">=&#8221;true&#8221;<\/font><\/span><\/font><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#ff0000\">CodeBehind<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">=&#8221;simple.aspx.cs&#8221;<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#ff0000\">Inherits<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">=&#8221;ssimple.simple&#8221;<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt;background-color: #ffff00\">%><\/font><\/span><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <span style=\"font-family:;color:\"><font face=\"Consolas\"><\/font><font style=\"font-size: 9.5pt\">\u00a0<\/font><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><\/font><font style=\"font-size: 9.5pt\"><!<\/font><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#800000\">DOCTYPE<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#ff0000\">html<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#0000ff\">><\/font><\/span><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <span style=\"font-family:;color:\"><font face=\"Consolas\"><\/font><font style=\"font-size: 9.5pt\">\u00a0<\/font><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><\/font><font style=\"font-size: 9.5pt\"><<\/font><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#800000\">html<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#ff0000\">xmlns<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#0000ff\">=&#8221;http:\/\/www.w3.org\/1999\/xhtml&#8221;><\/font><\/span><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><\/font><font style=\"font-size: 9.5pt\"><<\/font><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#800000\">head<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#ff0000\">runat<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#0000ff\">=&#8221;server&#8221;><\/font><\/span><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0 <\/font><\/span><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#800000\">title<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">><\/<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#800000\">title<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#0000ff\">><\/font><\/span><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><\/font><font style=\"font-size: 9.5pt\"><\/<\/font><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#800000\">head<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#0000ff\">><\/font><\/span><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><\/font><font style=\"font-size: 9.5pt\"><<\/font><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#800000\">body<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#0000ff\">><\/font><\/span><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0 <\/font><\/span><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#800000\">form<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#ff0000\">id<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">=&#8221;form1&#8243;<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#ff0000\">runat<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#0000ff\">=&#8221;server&#8221;><\/font><\/span><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0 <\/font><\/span><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#800000\">div<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#0000ff\">><\/font><\/span><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/font><\/span><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#800000\">asp<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">:<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#800000\">TextBox<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#ff0000\">ID<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">=&#8221;TextBox1&#8243;<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#ff0000\">runat<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">=&#8221;server&#8221;<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#ff0000\">TextMode<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">=&#8221;MultiLine&#8221;><\/<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#800000\">asp<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">:<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#800000\">TextBox<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#0000ff\">><\/font><\/span><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0 <\/font><\/span><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><\/<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#800000\">div<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#0000ff\">><\/font><\/span><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0 <\/font><\/span><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><\/<\/font><\/span><span style=\"font-family:;color:\"><font color=\"#800000\">form<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#0000ff\">><\/font><\/span><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><\/font><font style=\"font-size: 9.5pt\"><\/<\/font><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#800000\">body<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#0000ff\">><\/font><\/span><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><\/font><font style=\"font-size: 9.5pt\"><\/<\/font><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#800000\">html<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#0000ff\">><\/font><\/span><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<p>\u00a0<\/p>\n<p>To make the code easier to read and access the functionality needed; bring in the following four namespaces and corresponding references:<\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><\/font><font style=\"font-size: 9.5pt\">using<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\"> System.Globalization;<\/font><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><\/font><font style=\"font-size: 9.5pt\">using<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\"> System.Web.Configuration;<\/font><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><\/font><font style=\"font-size: 9.5pt\">using<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\"> System.Net.Http;<\/font><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><\/font><font style=\"font-size: 9.5pt\">using<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\"> System.Net.Http.Headers;<\/font><\/span>\n> <\/p>\n<p>At this point I am ready to call my REST API: **\/TESTDROPS.\u00a0 **<\/p>\n<p>**An important note: **You need to use the **VSCLT **URI for Cloud-based load test REST API\u2019s So the entire URL would look like:<\/p>\n<blockquote>\n<p><strong>https:\/\/<acccount>.<font style=\"background-color: #ffff00\" color=\"#ff0000\">vsclt<\/font>.visualstudio.com\/_apis\/clt\/testdrops&#8221;<\/strong><\/p>\n<\/blockquote>\n<p>While the REST API only takes one line of code (HttpClient.GetStringAsync\u2026); a couple of lines of code are required to setup up the connection.<\/p>\n<p>Since we are letting ASP.NET handle the Async handling you need to set this property in the event handler.<\/p>\n<p>\u00a0<\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><font color=\"#0000ff\"><\/font><font style=\"font-size: 9.5pt\">protected<\/font><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font style=\"background-color: #ffff00\" color=\"#0000ff\"><strong>async<\/strong><\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">void<\/font><\/span><span style=\"font-family:;color:\"> Page_Load(<\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">object<\/font><\/span><span style=\"font-family:;color:\"> sender, <\/span><span style=\"font-family:;color:\"><font color=\"#2b91af\">EventArgs<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\"> e)<\/font><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <span style=\"font-family:;color:\"><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/font><\/span><\/font><font style=\"font-size: 9.5pt\">{<\/font><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <span style=\"font-family:;color:\"><font face=\"Consolas\"><\/font><font style=\"font-size: 9.5pt\">\u00a0<\/font><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/font><\/span><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#2b91af\">HttpClient<\/font><\/span><span style=\"font-family:;color:\"> client = <\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">new<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#2b91af\">HttpClient<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\">();<\/font><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/font><\/span><\/span><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#008000\">\/\/setup the client connection<\/font><\/span><\/font><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/font><\/span><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#0000ff\">var<\/font><\/span><span style=\"font-family:;color:\"> vsoAccountUsername = <\/span><span style=\"font-family:;color:\"><font color=\"#2b91af\">WebConfigurationManager<\/font><\/span><span style=\"font-family:;color:\">.AppSettings[<\/span><span style=\"font-family:;color:\"><font color=\"#a31515\">&#8220;VSOnlineAccountUsername&#8221;<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\">];<\/font><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/font><\/span><\/span><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\" color=\"#008000\">\/\/ var vsoAccountUsername = &#8220;Chass@outlook.com&#8221;;<\/font><\/span><\/font><span style=\"font-family:;color:\"><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/font><\/span><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#0000ff\">var<\/font><\/span><span style=\"font-family:;color:\"> vsoAccountPassword = <\/span><span style=\"font-family:;color:\"><font color=\"#2b91af\">WebConfigurationManager<\/font><\/span><span style=\"font-family:;color:\">.AppSettings[<\/span><span style=\"font-family:;color:\"><font color=\"#a31515\">&#8220;VSOnlineAccountPassword&#8221;<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\">];<\/font><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/font><\/span><font style=\"font-size: 9.5pt\">client.DefaultRequestHeaders.Authorization = <\/font><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#0000ff\">new<\/font><\/span><span style=\"font-family:;color:\"> <\/span><span style=\"font-family:;color:\"><font color=\"#2b91af\">AuthenticationHeaderValue<\/font><\/span><span style=\"font-family:;color:\">(<\/span><span style=\"font-family:;color:\"><font color=\"#a31515\">&#8220;Basic&#8221;<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\">,<\/font><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/font><\/span><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#2b91af\">Convert<\/font><\/span><span style=\"font-family:;color:\">.ToBase64String(System.Text.<\/span><span style=\"font-family:;color:\"><font color=\"#2b91af\">Encoding<\/font><\/span><span style=\"font-family:;color:\">.ASCII.GetBytes(<\/span><span style=\"font-family:;color:\"><font color=\"#0000ff\">string<\/font><\/span><span style=\"font-family:;color:\">.Format(<\/span><span style=\"font-family:;color:\"><font color=\"#2b91af\">CultureInfo<\/font><\/span><span style=\"font-family:;color:\">.InvariantCulture, <\/span><span style=\"font-family:;color:\"><font color=\"#a31515\">&#8220;{0}:{1}&#8221;<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\">, vsoAccountUsername, vsoAccountPassword))));<\/font><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <font face=\"Consolas\"><span style=\"font-family:;color:\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/font><\/span><font style=\"font-size: 9.5pt\">TextBox1.Text = <\/font><\/span><\/font><font style=\"font-size: 9.5pt\"><span style=\"font-family:;color:\"><font color=\"#0000ff\">await<\/font><\/span><span style=\"font-family:;color:\"> client.GetStringAsync(<\/span><span style=\"font-family:;color:\"><font color=\"#a31515\">&#8220;https:\/\/aidemo.vsclt.visualstudio.com\/_apis\/clt\/testdrops&#8221;<\/font><\/span><\/font><span style=\"font-family:;color:\"><font style=\"font-size: 9.5pt\">);<\/font><\/span>\n> <\/p>\n<blockquote>\n<\/blockquote>\n<p class=\"MsoNormal\" style=\"margin: 0in 0in 0pt;line-height: normal\">\n>   <span style=\"font-family:;color:\"><font face=\"Consolas\"><span><font style=\"font-size: 9.5pt\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/font><\/span><\/font><font style=\"font-size: 9.5pt\">}<\/font><\/span>\n> <\/p>\n<p>\u00a0<\/p>\n<p>If you are getting an HTTP 401 error when running this sample more than likely your account doesn\u2019t have a Visual Studio Ultimate Subscription associated with it or you haven\u2019t enabled alternate credentials.<\/p>\n<p>For those of you a little more old school here is a console application version:\u00a0<\/p>\n<p>\u00a0<\/p>\n<blockquote>\n<p><font face=\"Courier New\">public static async void GetTestRuns() <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 try <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var elsAccountUrl = new Uri(ConfigurationManager.AppSettings[&#8220;ElsOnlineAccountUrl&#8221;]); <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var vsoAccountUsername = ConfigurationManager.AppSettings[&#8220;VSOnlineAccountUsername&#8221;]; <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var vsoAccountPassword = ConfigurationManager.AppSettings[&#8220;VSOnlineAccountPassword&#8221;];<\/font><\/p>\n<p><font face=\"Courier New\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 using (var client = new HttpClient()) <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 client.DefaultRequestHeaders.Accept.Add( <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 new MediaTypeWithQualityHeaderValue(&#8220;application\/json&#8221;));<\/font><\/p>\n<p><font face=\"Courier New\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(&#8220;Basic&#8221;, <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Convert.ToBase64String( <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.Text.Encoding.ASCII.GetBytes( <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 string.Format(&#8220;{0}:{1}&#8221;, vsoAccountUsername, vsoAccountPassword))));<\/font><\/p>\n<p><font face=\"Courier New\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 using (HttpResponseMessage response = client.GetAsync(elsAccountUrl+&#8221;\/_apis\/clt\/testruns&#8221;).Result) <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 response.EnsureSuccessStatusCode(); <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 string responseBody = await response.Content.ReadAsStringAsync(); <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Console.WriteLine(responseBody); <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 catch (Exception ex) <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Console.WriteLine(ex.ToString()); <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/font><\/p>\n<p>\u00a0<\/p>\n<\/blockquote>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>If you haven\u2019t played with App.Config files, here is an example:<\/p>\n<blockquote>\n<p><font face=\"Courier New\"><configuration> <br \/>\u00a0\u00a0\u00a0 <startup> <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\" \/> <br \/>\u00a0\u00a0\u00a0 <\/startup> <br \/>\u00a0\u00a0\u00a0 <appSettings> <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <!-- The {account} needs to be replaced by your Visual Studio Online account name. --> <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <add key=\"ElsOnlineAccountUrl\" value=\"<\/font>[<font face=\"Courier New\">https:\/\/<\/font><font style=\"background-color: #ffff00\">{account}.<\/font>vsclt.visualstudio.com&#8221;][7]<font face=\"Courier New\"> \/><\/font><\/p>\n<p><font face=\"Courier New\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <!-- The {username} and {password} need to be replaced by the alternate credentials you have set in VSO against your identity. --> <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <add key=\"VSOnlineAccountUsername\" value=\"{username}\" \/> <br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <add key=\"VSOnlineAccountPassword\" value=\"{password}\" \/> <br \/>\u00a0\u00a0\u00a0 <\/appSettings> <br \/><\/configuration><\/font><\/p>\n<\/blockquote>\n<p>\u00a0<\/p>\n<p>To make it has easy as possible, I have also attached a zip file of the web project:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/00\/00\/00\/45\/92\/chass\/2451.ssimple.zip\" title=\"2451.ssimple.zip\">2451&#46;ssimple.zip<\/a><\/p>\n<p><a href=\"http:\/\/blogs.msdn.com\/cfs-file.ashx\/__key\/communityserver-blogs-components-weblogfiles\/00-00-00-45-92-chass\/2451.ssimple.zip\" title=\"https:\/\/devblogs.microsoft.com\/00\/00\/00\/45\/92\/chass\/2451.ssimple.zip\">http:\/\/blogs.msdn.com\/cfs-file.ashx\/__key\/communityserver-blogs-components-weblogfiles\/00-00-00-45-92-chass\/2451.ssimple.zip<\/a><\/p>\n<p>\u00a0<\/p>\n<p>In case you are wondering what the return looks like I would recommend just running the URL: <a href=\"https:\/\/{youraccount}.vsclt.visualstudio.com\/_apis\/clt\/testdrops\" title=\"https:\/\/aidemo.vsclt.visualstudio.com\/_apis\/clt\/testdrops\">https:\/\/{youraccount}.vsclt.visualstudio.com\/_apis\/clt\/testdrops<\/a><\/p>\n<p>Here is a screenshot of the web application as well<\/p>\n<p><img decoding=\"async\" title=\"image\" style=\"border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px\" border=\"0\" alt=\"image\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/12\/1447.image_thumb_345D187F.png\" width=\"566\" height=\"360\" \/><\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>SEO Tagging: \u201cworlds simplest REST API Sample\u201d<\/p>\n","protected":false},"excerpt":{"rendered":"<p>REST API\u2019s are pretty cool, enabling you to do things like write your own custom reports, write your own interfaces and of course integrating load tests into your build.\u00a0 Looking at the sample referenced with our REST API documentation; at 400 lines to demonstrate 4 API\u2019s I must admit I found it pretty daunting so [&hellip;]<\/p>\n","protected":false},"author":63,"featured_media":45953,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,252],"tags":[],"class_list":["post-263","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","category-testing"],"acf":[],"blog_post_summary":"<p>REST API\u2019s are pretty cool, enabling you to do things like write your own custom reports, write your own interfaces and of course integrating load tests into your build.\u00a0 Looking at the sample referenced with our REST API documentation; at 400 lines to demonstrate 4 API\u2019s I must admit I found it pretty daunting so [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/posts\/263","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/users\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/comments?post=263"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/posts\/263\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/media\/45953"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/media?parent=263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/categories?post=263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/tags?post=263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}