Упражнение — отображение файлов пользователей

Завершено

В этом упражнении вы расширите возможности приложения, добавив в него функцию отображения списка файлов в корневой папке пользователя OneDrive для бизнеса.

Получение списка файлов

Для начала добавьте в приложение функцию вызова Microsoft Graph.

  1. Откройте файл Startup.cs в редакторе и изучите ПО промежуточного слоя Microsoft Identity, Microsoft Graph и ASP.NET Core, определенное в ConfigureServices().

  2. Найдите следующий код в методе ConfigureServices(). Этот код обеспечивает внедрение зависимостей для пользовательских объектов GraphProfileClient и GraphFilesClient. Объекты получают область для HTTP-запроса, иначе говоря, они будут создаваться один раз для каждого запроса к серверу.

    services.AddScoped<GraphProfileClient>();
    services.AddScoped<GraphFilesClient>();
    
  3. Откройте файл Graph/GraphFilesClient.cs и изучите имеющийся код. Обратите внимание на следующее:

    • В класс включены два поля readonly: _logger и _graphServiceClient. Этим полям будут назначены объекты, внедренные в конструктор.
    • Класс содержит методы GetFiles(), DownloadFile(), UploadFile() и UploadLargeFile().
  4. Удалите в конструкторе имеющийся код.

  5. Измените конструктор: внедрите ILogger<GraphFilesClient> и GraphServiceClient и присвойте связанным полям значения параметров:

    public GraphFilesClient(
      ILogger<GraphFilesClient> logger,
      GraphServiceClient graphServiceClient)
    {
      _logger = logger;
      _graphServiceClient = graphServiceClient;
    }
    
  6. Найдите метод GetFiles(). Замените имеющийся код в блоке try следующим кодом, чтобы использовать _graphServiceClient для извлечения файлов из учетной записи пользователя.

    return await _graphServiceClient.Me.Drive.Root.Children
                .Request()
                .Select(file => new
                {
                    file.Id,
                    file.Name,
                    file.Folder,
                    file.Package
                })
                .GetAsync();
    
  7. Найдите метод DownloadFile() и замените имеющийся код в блоке try следующим кодом для получения файлов на основе их ИД.

    return await _graphServiceClient
        .Me.Drive.Items[fileId].Content
        .Request()
        .GetAsync();
    
  8. Прежде чем продолжать работу, сохраните файл GraphFilesClient.cs.

  9. Откройте файл Pages/Files.cshtml.cs и изучите имеющийся код. Обратите внимание на следующее:

    • Класс FilesModel содержит несколько полей и свойств, таких как _logger, _graphFilesClient, UploadedFile и Files.
    • GraphFilesClient внедряется в конструктор и назначается полю _graphFilesClient.
    • Определяются методы OnGetAsync(), OnPostAsync() и OnGetDownloadFile().
  10. Найдите метод OnGetAsync() и замените имеющийся код следующим:

    Files = await _graphFilesClient.GetFiles();
    

    Этот код использует экземпляр GraphFilesClient для получения пользовательских файлов и назначает их свойству Files.

  11. Найдите метод OnGetDownloadFile() и замените имеющийся в нем код следующим:

    var stream = await _graphFilesClient.DownloadFile(id);
    return File(stream, MediaTypeNames.Application.Octet, name);
    

    Этот код выполняет следующие задачи.

    • Он вызывает метод _graphFilesClient.DownloadFile, который принимает идентификатор файла в качестве параметра.
    • После возвращения потока файлов OnGetDownloadFile() возвращает новый объект File со страницы Razor. Это действие позволяет скачивать файлы в браузере пользователя.
  12. Прежде чем продолжать, сохраните файл Files.cshtml.cs.

Отображение и скачивание файлов в приложении

Следующая задача заключается в том, чтобы отобразить файлы пользователя на веб-странице и разрешить их скачивание.

  1. Откройте файл Files.cshtml в редакторе.

  2. Изучите код HTML и Razor и обратите внимание на то, что он обрабатывает следующие задачи:

    • Гарантирует, что пользователь прошел проверку подлинности.
    • Проверяет свойство Model.Files, чтобы узнать, есть ли файлы для поочередной обработки и отображения на странице.
  3. Найдите в файле комментарий @* Add foreach here *@ и замените его следующим кодом:

    @foreach(var file in Model.Files)
    {
    
  4. Найдите комментарий @* Add foreach closing bracket here *@ и замените его закрывающей скобкой для оператора foreach, добавленного на предыдущем шаге.

  5. Добавьте указанный ниже код в цикл foreach.

    if (file.Folder == null && file.Package == null) {
        <li>
            <a asp-page-handler="DownloadFile"
                asp-route-name="@file.Name"
                asp-route-id="@file.Id">@file.Name</a>
        </li>
    }
    

    Этот код выполняет следующие задачи.

    • Проверяет, что объект файла не является папкой или пакетом.
    • Использует синтаксис Razor для создания гиперссылки. Когда пользователь выберет ссылку, имя файла и ИД файла будут переданы методу DownloadFileFilesModel, который был изменен ранее.
  6. Прежде чем продолжать, сохраните файл Files.cshtml.

Запуск приложения

Перед запуском приложения убедитесь, что у учетной записи, используемой для входа, есть файлы в хранилище OneDrive. Пора запустить приложение и опробовать его!

  1. Выполните следующий шаг в зависимости от используемого редактора кода:

    • Visual Studio

      Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.

    • Visual Studio Code или другой редактор кода

      Откройте окно терминала в папке Begin и запустите указанную ниже команду.

      dotnet run
      
  2. Откройте браузер и перейдите по адресу https://localhost:5001.

  3. Войдите с помощью клиента разработчика Microsoft 365, который использовался ранее при регистрации приложения Microsoft Entra.

  4. Щелкните ссылку Файлы в заголовке, чтобы просмотреть файлы OneDrive пользователя.

    Страница с отображением событий календаря.

    Примечание.

    Если файлы не отображаются, проверьте, есть ли у пользователя файлы в хранилище OneDrive.

  5. Выберите файл в списке, чтобы скачать его на компьютер.

  6. Прежде чем продолжить, закройте браузер и нажмите CTRL+C в окне терминала, чтобы остановить сервер.

    Примечание.

    Если вы открыли проект в Visual Studio, можете закрыть браузер или нажать клавиши SHIFT+F5 в Visual Studio, чтобы остановить сервер. Закройте окно терминала Visual Studio, если оно еще открыто.

Вы успешно показали, как открывать, отображать и скачивать файлы вошедшего пользователя с помощью Microsoft Graph и ASP.NET Core!