【问题标题】:How to make api request to Github repository using restapi?如何使用 rest api 向 Github 存储库发出 api 请求?
【发布时间】:2020-12-10 19:08:27
【问题描述】:

我是 C# 和 .Net 的新手,我很难理解我遇到的这个问题。我觉得我所拥有的已经足够了,但我自己不确定。所以如果有人可以查看我下面的代码并告诉我要纠正什么是错的。谢谢

这是我的模型类

namespace github_project.Models
{
    public class GithubItem
    {
        public int Id { get; set; }
        public string UserName { get; set; }
        public string FullName { get; set; }
        public string City { get; set; }
        public string ProjectName { get; set; }
        public string Commits { get; set; }
        public double Rating { get; set; }
        public string AvatarUrl { get; set; }
    }
}

这是我的数据库上下文

namespace github_project.Database
{
    public class GithubContext : DbContext
    {
        public DbSet<GithubItem> Github { get; set; }
        public GithubContext(DbContextOptions<GithubContext> options) : base(options)
        {
        }

        public GithubItem ItemsList()
        {
            List<GithubItem> build = Build();
            GithubItem itemsList = JsonConvert.DeserializeObject<GithubItem>(build);
            return itemsList;
        }

        public List<GithubItem> Build()
        {
            var getData = GetGithubData();
            return System.Text.Json.JsonSerializer.Deserialize<List<GithubItem>>(getData);
        }

        private string GetGithubData()
        {
            string username = "**test**";
            var url = "https://api.github.com/users/" + username + "/repos?page=1";

            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.Method = "GET";
            request.ContentType = "application/json";
            request.UserAgent = "TestApp";

            using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
            {
                StreamReader reader = new StreamReader(response.GetResponseStream());
                return reader.ReadToEnd();
            }
        }

        public List<GithubItem> getGithub() => Github.Local.ToList<GithubItem>();
    }
}

这终于是我的控制器了

[HttpGet("/github")]
public GithubItem GetAll()
{
    return _context.ItemsList();
}

我正在向 github 发出请求,以获取所有数据并在我的请求中使用它。我在这里得到一个将 Collection.List 转换为 String 的方法如下:

public GithubItem ItemsList()
{
    List<GithubItem> build = Build();
    GithubItem itemsList = JsonConvert.DeserializeObject<GithubItem>(**build**);
    return itemsList;
}

有人可以帮助我,有人可以告诉我这里出了什么问题吗???谢谢

【问题讨论】:

    标签: c# asp.net-mvc xmlhttprequest rest


    【解决方案1】:

    您不能反序列化对象或将对象从 List&lt;GithubItem&gt; 转换为单个 GithubItem。这就是你正在做的事情。

    如你所见,你有build:

    List<GithubItem> build = Build();
    

    这个build 变量是List&lt;GithubItem。现在您想使用 JsonConvert 的 Deserialize 将其转换为单个吗?

    无论您的要求是什么,都可以使用此代码获取一条记录:

     GithubItem itemsList = build.FirstOrDefault();
    

    那会很好。但这只是一个例子,因为我不确定您的要求是什么。如果你需要过滤你的记录,你也可以在 FirstOrDefault 上传递一个参数:

     GithubItem itemsList = build.FirstOrDefault(x => x.UserName == "John");
    

    这样也行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-24
      • 2019-12-21
      • 1970-01-01
      • 2016-01-06
      • 2017-03-05
      • 2013-03-06
      • 2021-10-05
      • 1970-01-01
      相关资源
      最近更新 更多