Exercício – Exibir arquivos de usuário

Concluído

Neste exercício, você estenderá o aplicativo para exibir uma lista de arquivos na pasta raiz do usuário no OneDrive for Business.

Obter a lista de arquivos

Comece adicionando a chamada do Microsoft Graph ao aplicativo.

  1. Abra Startup.cs em seu editor e reserve um momento para explorar o Microsoft Identity, o Microsoft Graph e ASP.NET Core middleware definido em ConfigureServices().

  2. Localize o seguinte código no método ConfigureServices(). Esse código habilita a injeção de dependência dos objetos personalizados chamados GraphProfileClient e GraphFilesClient. Os objetos têm escopo para a solicitação HTTP, o que significa que eles serão criados uma vez por solicitação para o servidor.

    services.AddScoped<GraphProfileClient>();
    services.AddScoped<GraphFilesClient>();
    
  3. Abra Graph/GraphFilesClient.cs e reserve um momento para explorar o código existente. Observe os seguintes recursos:

    • Dois campos readonly denominados _logger e _graphServiceClient estão incluídos na classe. Os objetos injetados no construtor serão atribuídos a esses campos.
    • A classe contém os métodos GetFiles(), DownloadFile(), UploadFile() e UploadLargeFile().
  4. Remova o código existente no construtor.

  5. Modifique o construtor para injetar ILogger<GraphFilesClient> e GraphServiceClient, e atribua os valores de parâmetro aos campos associados:

    public GraphFilesClient(
      ILogger<GraphFilesClient> logger,
      GraphServiceClient graphServiceClient)
    {
      _logger = logger;
      _graphServiceClient = graphServiceClient;
    }
    
  6. Localize o método GetFiles(). No bloco try, substitua o código existente pelo código a seguir para usar _graphServiceClient para recuperar arquivos da conta do usuário.

    return await _graphServiceClient.Me.Drive.Root.Children
                .Request()
                .Select(file => new
                {
                    file.Id,
                    file.Name,
                    file.Folder,
                    file.Package
                })
                .GetAsync();
    
  7. Localize o métodoDownloadFile() e substitua o código existente no bloco try pelo código a seguir para recuperar um arquivo com base em sua ID.

    return await _graphServiceClient
        .Me.Drive.Items[fileId].Content
        .Request()
        .GetAsync();
    
  8. Salve o arquivo GraphFilesClient.cs antes de continuar.

  9. Abra Pages/Files.cshtml.cs e reserve um momento para explorar o código existente. Observe os seguintes recursos:

    • A classe FilesModel contém vários campos e propriedades, como _logger, _graphFilesClient, UploadedFile e Files.
    • GraphFilesClient é injetado no construtor e atribuído ao campo _graphFilesClient.
    • Os métodos OnGetAsync(), OnPostAsync() e OnGetDownloadFile() são definidos.
  10. Localize o método OnGetAsync() e substitua o código existente pelo seguinte código:

    Files = await _graphFilesClient.GetFiles();
    

    Esse código usa a instância GraphFilesClient para recuperar arquivos de usuário e atribui-os à propriedade Files.

  11. Localize o método OnGetDownloadFile() e substitua o código existente no método pelo seguinte código:

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

    Esse código executa as seguintes tarefas:

    • Ele chama o método _graphFilesClient.DownloadFile, que aceita a ID do arquivo como um parâmetro.
    • Depois que o fluxo de arquivos é retornado, OnGetDownloadFile() retorna um novo objeto File da página Razor. Esta etapa permite que o arquivo seja baixado no navegador do usuário.
  12. Salve o arquivo Files.cshtml.cs antes de continuar.

Exibir e baixar arquivos no aplicativo

A próxima etapa é mostrar os arquivos do usuário em uma página da Web e permitir que eles sejam baixados.

  1. Abra o arquivo Files.cshtml no editor.

  2. Reserve um momento para ver o código HTML e Razor e observar que ele lida com as seguintes tarefas:

    • Garante que o usuário seja autenticado.
    • Verifica a propriedade Model.Files para ver se há algum arquivo para iterar e exibir na página.
  3. Localize o comentário @* Add foreach here *@ e substitua-o pelo seguinte código:

    @foreach(var file in Model.Files)
    {
    
  4. Localize o comentário @* Add foreach closing bracket here *@ e substitua-o por um colchete de fechamento para a instrução foreach adicionada na etapa anterior.

  5. Adicione o seguinte código ao loop 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>
    }
    

    Esse código executa as seguintes tarefas:

    • Verifica se o objeto de arquivo não é uma pasta ou pacote.
    • Usa sintaxe Razor para criar um hiperlink. Quando o usuário selecionar o link, o nome do arquivo e a ID do arquivo serão passados para o método FilesModel de DownloadFile que você modificou anteriormente.
  6. Salve o arquivo Files.cshtml antes de continuar.

Execute o aplicativo

Antes de executar o aplicativo, verifique se a conta usada para entrar tem alguns arquivos no OneDrive. É hora de executar seu aplicativo e experimentá-lo!

  1. Execute a seguinte etapa com base no seu editor de códigos:

    • Visual Studio

      Clique em F5 para compilar e executar o projeto.

    • Visual Studio Code ou outro editor de códigos

      Abra uma janela do terminal na pasta Iniciar e execute o seguinte comando:

      dotnet run
      
  2. Abra um navegador e acesse https://localhost:5001.

  3. Inicie sessão com o inquilino do programador do Microsoft 365 que utilizou anteriormente ao registar a Aplicação Microsoft Entra.

  4. Selecione o link de Arquivos no cabeçalho para exibir os arquivos OneDrive do usuário.

    Página exibindo eventos de calendário.

    Observação

    Se você não estiver vendo nenhum arquivo, verifique se o usuário tem arquivos no OneDrive.

  5. Selecione um arquivo na lista para baixá-lo para seu computador.

  6. Feche o navegador e clique em CTRL+C na janela do terminal para interromper o servidor antes de continuar.

    Observação

    Se você abriu o projeto no Visual Studio, poderá fechar o navegador ou selecionar SHIFT+F5 no Visual Studio para interromper o servidor. Feche a janela do terminal Visual Studio criada se ainda estiver aberta.

Você demonstrou com êxito como acessar, exibir e baixar arquivos para um usuário conectado usando o Microsoft Graph e o ASP.NET Core!