【发布时间】:2018-03-10 11:15:53
【问题描述】:
我正在编写一个 MVC5 Web 应用程序,以允许我在 Visual Studio Team Services (VSTS) 中查询我们的工作项。
遵循this one 和this one 之类的教程后,我已经成功创建了应用程序,以便它可以使用我为开发目的创建的个人访问令牌 (PAT) 检索我想要的工作项。我还通过密切关注可用的示例here,成功创建了整个 OAuth2 流程,以便将用户带到 VSTS,要求授权我的应用程序,然后返回到我的回调页面。回调 URL 正确包含用户的访问令牌、刷新令牌等。到目前为止,一切顺利。
我将用户的刷新令牌连同到期日期和时间一起存储在我的数据库中的用户记录中(以便我知道如果他们在访问令牌过期后尝试访问应用程序时刷新令牌)。
我的问题是我无法弄清楚如何在 C# 代码中使用访问令牌而不是我自己的 PAT 来查询 VSTS。我正在使用的代码如下(它与我在上面链接到的 GitHub 上的示例中的代码几乎相同),它运行良好,但正如您所看到的,它使用的是 PAT。我该如何改用用户的访问令牌,目前我只是将其视为string,当它由 API 返回时(可能是错误的?)。
public class GetFeatures
{
readonly string _uri;
readonly string _personalAccessToken;
readonly string _project;
public GetFeatures()
{
_uri = "https://myaccount.visualstudio.com";
_personalAccessToken = "abc123xyz456"; //Obviously I've redacted my actual PAT
_project = "My Project";
}
public List<VSTSFeatureModel> AllFeatures()
{
Uri uri = new Uri(_uri);
string personalAccessToken = _personalAccessToken;
string project = _project;
VssBasicCredential credentials = new VssBasicCredential("", _personalAccessToken);
//create a wiql object and build our query
Wiql wiql = new Wiql()
{
Query = "Select [State], [Title] " +
"From WorkItems " +
"Where [Work Item Type] = 'Feature' " +
"And [System.TeamProject] = '" + project + "' " +
"And [System.State] <> 'Removed' " +
"Order By [State] Asc, [Changed Date] Desc"
};
//create instance of work item tracking http client
using (WorkItemTrackingHttpClient workItemTrackingHttpClient = new WorkItemTrackingHttpClient(uri, credentials))
{
//execute the query to get the list of work items in the results
WorkItemQueryResult workItemQueryResult = workItemTrackingHttpClient.QueryByWiqlAsync(wiql).Result;
//some error handling
if (workItemQueryResult.WorkItems.Count() != 0)
{
//...do stuff
}
return null;
}
}
}
【问题讨论】:
标签: c# oauth-2.0 azure-devops azure-devops-rest-api