Exercício – Exibir arquivos de usuário
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.
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()
.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>();
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()
eUploadLargeFile()
.
- Dois campos
Remova o código existente no construtor.
Modifique o construtor para injetar
ILogger<GraphFilesClient>
eGraphServiceClient
, e atribua os valores de parâmetro aos campos associados:public GraphFilesClient( ILogger<GraphFilesClient> logger, GraphServiceClient graphServiceClient) { _logger = logger; _graphServiceClient = graphServiceClient; }
Localize o método
GetFiles()
. No blocotry
, 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();
Localize o método
DownloadFile()
e substitua o código existente no blocotry
pelo código a seguir para recuperar um arquivo com base em sua ID.return await _graphServiceClient .Me.Drive.Items[fileId].Content .Request() .GetAsync();
Salve o arquivo GraphFilesClient.cs antes de continuar.
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
eFiles
. -
GraphFilesClient
é injetado no construtor e atribuído ao campo_graphFilesClient
. - Os métodos
OnGetAsync()
,OnPostAsync()
eOnGetDownloadFile()
são definidos.
- A classe
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 à propriedadeFiles
.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 objetoFile
da página Razor. Esta etapa permite que o arquivo seja baixado no navegador do usuário.
- Ele chama o método
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.
Abra o arquivo Files.cshtml no editor.
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.
Localize o comentário
@* Add foreach here *@
e substitua-o pelo seguinte código:@foreach(var file in Model.Files) {
Localize o comentário
@* Add foreach closing bracket here *@
e substitua-o por um colchete de fechamento para a instruçãoforeach
adicionada na etapa anterior.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
deDownloadFile
que você modificou anteriormente.
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!
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
Abra um navegador e acesse
https://localhost:5001
.Inicie sessão com o inquilino do programador do Microsoft 365 que utilizou anteriormente ao registar a Aplicação Microsoft Entra.
Selecione o link de Arquivos no cabeçalho para exibir os arquivos OneDrive do usuário.
Observação
Se você não estiver vendo nenhum arquivo, verifique se o usuário tem arquivos no OneDrive.
Selecione um arquivo na lista para baixá-lo para seu computador.
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!