ctOctokit. net сопровождающий здесь.
IReadOnlyList<T>
, возвращаемый от каждого основанного на коллекции API в Octokit. net - это интерфейс, который мы используем. NET Framework, который мы используем сигнализировать, что ответ, возвращаемый из API GitHub, не является изменяемым, и в нем отсутствуют изменяемые API, такие как Add
или Append
, поэтому ваш пример не компилируется.
В частности, именно эта строка :
public IReadOnlyList<GitHubCommit> Commits = new List<GitHubCommit>();
IReadOnlyList<T>
можно перечислить, как и другие типы коллекций, поэтому самый быстрый способ получить пример работы - использовать вместо этого API List<T>
, которые поддерживают добавление диапазона элементов:
public List<Repository> Repositories { get; set; }
public List<GitHubCommit> Commits = new List<GitHubCommit>();
public async Task OnGetAsync()
{
if (User.Identity.IsAuthenticated)
{
GitHubName = User.FindFirst(c => c.Type == ClaimTypes.Name)?.Value;
GitHubLogin = User.FindFirst(c => c.Type == "urn:github:login")?.Value;
GitHubUrl = User.FindFirst(c => c.Type == "urn:github:url")?.Value;
GitHubAvatar = User.FindFirst(c => c.Type == "urn:github:avatar")?.Value;
string accessToken = await HttpContext.GetTokenAsync("access_token");
var github = new GitHubClient(new ProductHeaderValue("CommitView"), new InMemoryCredentialStore(new Credentials(accessToken)));
var repositories = await github.Repository.GetAllForCurrent();
Repositories = new List<Repository>(repositories);
foreach (var repo in Repositories)
{
var repoCommits = await github.Repository.Commit.GetAll(repo.Id);
Commits.AddRange(repoCommits);
}
}
}