Как использовать Github API в приложении ASP.NET MVC? - PullRequest
0 голосов
/ 29 июня 2018

Я новичок в ASP.NET MVC , и я пытался поближе познакомиться с платформой .NET и ее особенностями. В настоящее время я пытаюсь создать приложение C # MVC , которое использует Github API для извлечения некоторых данных, таких как перечисление всех моих репозиториев, отображение некоторой их информации, поиск репозиториев по имени ( не обязательно мое) и т. д. Но я борюсь за простые вещи. Во-первых, я не знаю, как правильно установить соединение, чтобы получить эту информацию. Я пытался следовать руководству по octokit на их странице и пытался получить данные с помощью JSON и преобразовать их в объект C #, но все мои попытки не увенчались успехом в обоих случаях.

Я видел этот пример в octokit, он работает для консольных приложений:

var github = new GitHubClient(new ProductHeaderValue("MyAmazingApp"));
var user = await github.User.Get("half-ogre");
Console.WriteLine(user.Followers + " folks love the half ogre!");

Но я не совсем понимаю, куда мне их поместить, учитывая структуру MVC в ASP.NET или то, как она должна отличаться. Я не нашел документацию по octokit очень полезной по этим аспектам.

И некоторые из моих вещей, которые я до сих пор делал, пытаясь десериализовать JSON в C #:

Модель

namespace GithubAPI.Models {
    public class Repositories {
        public string name { get; set; }
        public string language { get; set; }
        public string owner { get; set; } //or login ?
        public string updated_at { get; set; }  
    }

    public class RepCollections {
        private List<Repositories> repositories;

        public List<Repositories> Repositories { get => this.repositories; set => this.repositories = value; }
    }
}

Я сделал это, когда попытался сохранить данные JSON в класс

Контроллеры

public ActionResult Index() {
            var url = "https://api.github.com/users/{myuser}/repos";

            using (var webClient = new WebClient()) {
                var rawJSON = string.Empty;

                try {
                    rawJSON = webClient.DownloadString(url);
                }
                catch (Exception) { }

                RepCollections rep = JsonConvert.DeserializeObject<RepCollections>(rawJSON);

                return View();
            }
        }

Это не сработало, возможно потому, что это не в том месте, ИДК.

View

@using GithubAPI.Models
@model RepCollections

@{
    ViewBag.Title = "Repositories";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div class="row">
    <div class="col-md-4">
        <h2>Repositories</h2>
        <br/>
        <p>User: @Html.DisplayNameFor(model => model.owner)</p>
        <div>
            <table class="table">
                <tbody>
                <tr><th></th></tr>
                @foreach (Repositories r in Model) {
                    <tr>
                        <td>
                            @r.name
                        </td>
                    </tr>
                }

                </tbody>
            </table>
        </div>
    </div>
</div>

Излишне говорить, что foreach не сработало.

Кто-нибудь может дать мне немного света, пожалуйста? Спасибо.

П.С .: Я не использую OAuth. Просто хочу базовую аутентификацию.

1 Ответ

0 голосов
/ 29 июня 2018

Ваш цикл foreach не работает, потому что вы не передаете модель из контроллера в представление. Попробуйте это:

Контроллер

public ActionResult Index()
        {
            var url = "https://api.github.com/users/{myuser}/repos";

            using (var webClient = new WebClient())
            {
                var rawJSON = webClient.DownloadString(url);
                RepCollections rep = JsonConvert.DeserializeObject<RepCollections>(rawJSON);

                return View(rep);
            }
        }

View

@using GithubAPI.Models
@model RepCollections

@{
    ViewBag.Title = "Repositories";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div class="row">
    <div class="col-md-4">
        <h2>Repositories</h2>
        <br />
        <p>User: @Html.DisplayNameFor(model => model.owner)</p>
        <div>
            <table class="table">
                <tbody>
                    <tr><th></th></tr>
                    @foreach (Repositories r in Model)
                    {
                        <tr>
                            <td>
                                @r.name
                            </td>
                        </tr>
                    }

                </tbody>
            </table>
        </div>
    </div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...