练习 - 显示用户文件
在此练习中,你将扩展应用以显示 OneDrive for Business 中用户的 OneDrive for Business 根文件夹里的文件列表。
获取文件列表
首先将 Microsoft Graph 调用添加到应用程序。
在编辑器中打开 Startup.cs,花些时间浏览
ConfigureServices()
中定义的 Microsoft 标识、Microsoft Graph 和 ASP.NET Core 中间件。在
ConfigureServices()
方法中找到以下代码。 此代码为名为 GraphProfileClient 和 GraphFilesClient 的自定义对象启用依赖关系注入。 这些对象的范围为 HTTP 请求,这意味着每对服务器请求一次,都将会创建这些对象。services.AddScoped<GraphProfileClient>(); services.AddScoped<GraphFilesClient>();
打开 Graph/GraphFilesClient.cs,花些时间浏览现有代码。 请注意下列功能:
- 名为
_logger
和_graphServiceClient
的两个readonly
字段包含在该类中。 注入构造函数的对象将分配给这些字段。 - 该类包含
GetFiles()
、DownloadFile()
、UploadFile()
和UploadLargeFile()
方法。
- 名为
删除构造函数中的现有代码。
修改构造函数以注入参数值
ILogger<GraphFilesClient>
和GraphServiceClient
,并将其分配给关联字段:public GraphFilesClient( ILogger<GraphFilesClient> logger, GraphServiceClient graphServiceClient) { _logger = logger; _graphServiceClient = graphServiceClient; }
找到
GetFiles()
方法。 在try
文本块中,将现有代码替换为以下代码,以使用_graphServiceClient
从用户帐户检索文件。return await _graphServiceClient.Me.Drive.Root.Children .Request() .Select(file => new { file.Id, file.Name, file.Folder, file.Package }) .GetAsync();
找到方法
DownloadFile()
,将try
文本块中的现有代码替换为以下代码,从而根据其 ID 检索文件。return await _graphServiceClient .Me.Drive.Items[fileId].Content .Request() .GetAsync();
保存 GraphFilesClient.cs 文件,然后再继续。
打开 Pages/Files.cshtml.cs 并花些时间浏览现有代码。 请注意下列功能:
- 类
FilesModel
包含多个字段和属性,如_logger
、_graphFilesClient
、UploadedFile
和Files
。 -
GraphFilesClient
被注入到构造函数中并分配给_graphFilesClient
字段。 - 已定义
OnGetAsync()
、OnPostAsync()
和OnGetDownloadFile()
方法。
- 类
找到
OnGetAsync()
方法,并将现有代码替换为以下代码:Files = await _graphFilesClient.GetFiles();
此代码使用
GraphFilesClient
实例检索用户文件并将其分配给Files
属性。找到
OnGetDownloadFile()
方法,将其中的现有代码替换为以下代码:var stream = await _graphFilesClient.DownloadFile(id); return File(stream, MediaTypeNames.Application.Octet, name);
此代码将执行以下任务:
- 调用
_graphFilesClient.DownloadFile
方法,该方法会接受文件 ID 作为参数。 - 返回文件流后,
OnGetDownloadFile()
返回来自 Razor 页面的新File
对象。 此步骤允许在用户的浏览器中下载文件。
- 调用
保存 Files.cshtml.cs 文件,然后再继续。
在应用中显示并下载文件
下一步是在网页中显示用户文件并允许下载这些文件。
在编辑器中打开 Files.cshtml 文件。
花些时间查看 HTML 和 Razor 代码,并注意它处理以下任务:
- 确保对用户进行身份验证。
- 检查
Model.Files
属性以查看是否有要在页面中进行访问和显示的文件。
找到行
@* Add foreach here *@
注释并将其替换为以下代码:@foreach(var file in Model.Files) {
找到
@* Add foreach closing bracket here *@
注释并将其替换为上一步中添加的foreach
语句的右方括号。在
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 语法创建超链接。 当用户选择链接时,文件名和文件 ID 将传递给之前修改的
FilesModel
的DownloadFile
方法。
保存 Files.cshtml 文件,然后再继续。
运行应用
在运行应用程序之前,请确保用于登录的帐户在OneDrive 中有一些文件。 快来运行应用程序试用吧!
基于代码编辑器执行以下步骤:
Visual Studio
按 F5 生成并运行项目。
Visual Studio Code 或其他代码编辑器
在 Begin 文件夹中打开终端窗口,并运行以下命令:
dotnet run
打开浏览器访问
https://localhost:5001
。使用之前注册 Microsoft Entra 应用程序时使用的 Microsoft 365 开发人员租户登录。
选择标题中的“文件”链接,以查看用户的 OneDrive 文件。
注意
如果未看到任何文件,请确保用户在 OneDrive 中有文件。
选择列表中的文件,下载到计算机。
关闭浏览器,然后在终端窗口中按 CTRL+C停止服务器,然后再继续。
注意
’如果已在 Visual Studio 中打开项目,则可以关闭浏览器或在 Visual Studio 中选择 SHIFT+F5来停止服务器。 如果仍然处于打开状态,请关闭 Visual Studio 创建的终端窗口。
你已成功演示了如何使用 Microsoft Graph 和 ASP.NET Core 访问、显示和下载文件!