如何以编程方式自动添加我的c#应用程序问题到Github

本文关键字:应用程序 问题 Github 我的 添加 编程 方式自 | 更新日期: 2023-09-27 17:49:32

如何使用c#在我的Github存储库上以编程方式添加问题?

我有一个错误处理程序库(ErrorControlSystem)附加在一个win应用程序,以引发SQL表上的异常。

现在,我想存储ErrorControlSystem自我异常没有目标应用程序异常在自我Github存储库问题。

我该怎么做?

如何以编程方式自动添加我的c#应用程序问题到Github

你可以使用GitHub API。创建一个webhook并添加一个issue:

POST /repos/:owner/:repo/issues

示例来自https://developer.github.com/v3/issues/

{
  "title": "Found a bug",
  "body": "I'm having a problem with this.",
  "assignee": "octocat",
  "milestone": 1,
  "labels": [
    "Label1",
    "Label2"
  ]
}

所以你所要做的就是一个HTTP - POST命令来添加一个问题。

你可以使用WebRequest来发送post请求。

api的完整描述:https://api.github.com/repos/octocat/Hello-World/issues/1347

完整的c#如:

public void CreateBug(Exception ex) {
  WebRequest request = WebRequest.Create ("https://api.github.com/repos/yourUserName/YourRepo/issues ");
  request.Method = "POST";
  string postData = "{'title':'exception occured!', 'body':'{0}','assignee': 'yourUserName'}";
  byte[] byteArray = Encoding.UTF8.GetBytes (string.Format(postData,ex));
  request.ContentLength = byteArray.Length;
  Stream dataStream = request.GetRequestStream ();
  dataStream.Write (byteArray, 0, byteArray.Length);
  dataStream.Close ();
  WebResponse response = request.GetResponse ();
}

现在你的问题已经创建,响应包含来自GitHub的响应

这是"快速、简单"的解决方案。如果你想做更多的GitHub问题,@VonC的答案可能是更好的一个,因为它提供了一个更多的对象相关的解决方案

如果你需要用c#在GitHub repo上编程创建问题,你可以参考c#项目 octokit/octokit.net ,它将使用GitHub API。

它可以创建问题:

var createIssue = new NewIssue("this thing doesn't work");
var issue = await _issuesClient.Create("octokit", "octokit.net", createIssue);

Create返回代表已创建问题的Task<Issue>

如果你正在寻找一个更完整的代码解决方案和不同部分是如何工作的,请随时查看我最近创建的解决方案(在。net 6中),该解决方案在GitHub repo中创建了一个问题,并展示了如何将其设置为GitHub应用程序。在你的情况下,你可能想使用OAuth认证机制而不是单独的GitHub应用程序,但你可以这样做。

我的解决方案是在这里我的GitHub: https://github.com/Kirkaiya/Branch-Protector-GHApp-.NET-Lambda

Function.cs中实际创建问题的方法(使用Octokit .NET客户端库)在这里:

private void CreateIssue(GitHubClient ghc, long repoId)
{
    string issuebody = GetIssueBody();
     try
    {
        var newIssueRequest = new NewIssue("Branch protections enabled for this repo");
        newIssueRequest.Body = issuebody;
        newIssueRequest.Assignees.Add("Kirkaiya");
        var issue = ghc.Issue.Create(repoId, newIssueRequest).Result;
        Console.WriteLine($"Created new issue at {issue.HtmlUrl}");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error creating issue: {ex.Message}");
    }
}

但是在src/Function.cs中查看完整的代码,以及如何完成授权等