如何使用Octokit c#获得GitHub存储库



我正试图将GitHubAPI集成在我正在开发的web应用程序中。我听说在c#中做到这一点的最好方法是使用Octokit库,但我找不到非常明确的文档。现在,首先,我正试图从GitHub获得一个回购。当我开始时,我手动访问GitHub API中所示的端点。然而,似乎这样做一个提交是不可能的,所以我切换到Octokit,但我有一些问题在这里。

这是我的OctokitGitService类:

*imports here*

namespace Web.Git.Api.Services;
public class OctokitGithubClient
{
private readonly Config _config;
private readonly GitHubClient _gitClient;
public List<Repository> Repositories { get; set; }
public OctokitGithubClient(IOptions<Config> options)
{
_config = options.Value;
var ghe = new Uri(_config.apiUrl);
_gitClient= new GitHubClient(new ProductHeaderValue("web-app-v1"), ghe);
var tokenAuth = new Credentials(_config.PAT.git);
_gitClient.Credentials = tokenAuth;
}
public async Task<List<Repository>> getGithubRepository()
{ 
var data = _gitClient.Repository.GetAllForCurrent();
Repositories = new List<Repository>(data);   
return Repositories;
}
}

我得到这个错误信息:

错误CS0029:无法隐式地将类型"System.Collections.Generic.List

有谁能给我点提示吗?我正在查看Octokit文档,但我找不到API文档。泰!

你可以阅读更多关于c#异步编程的内容。这是一个很好的开始。

GetAllForCurrent()签名是Task<IReadOnlyList<Repository>> GetAllForCurrent();如果我们想异步使用这个,我们使用await,然后我们使用ToList()IReadOnlyList<Repository>转化为List<Repository>

public async Task<List<Repository>> GetGithubRepositoryAsync()
{
var repos = await _gitClient.Repository.GetAllForCurrent();
return repos.ToList();
}

如果我们想同步使用一种方法是使用Task<>

中的Result
public List<Repository> GetGithubRepository()
{
return _gitClient.Repository.GetAllForCurrent().Result.ToList();
}

如本链接所述,不建议使用Result属性

Result属性是一个阻塞属性。如果您试图在它的任务完成之前访问它,那么当前活动的线程将被阻塞,直到任务完成并且该值可用。在大多数情况下,您应该使用await来访问该值,而不是直接访问该属性。

相关内容

  • 没有找到相关文章

最新更新