C# 中的 Azure 存储介绍
Azure Storage 是 Microsoft Azure 提供的一项基本服务,与 .NET 技术相结合后,它将成为在云中存储和检索文件的强大工具。 在他的深入教程"Intro to Azure Storage in C#"中,Tim Corey 引导观众完成配置 Azure Storage 帐户、设置 Azure Blob Storage 以及将其集成到 C# ASP.NET Core MVC 项目中的具体步骤。
在本文中,我们将紧跟 Tim 的视频,探讨过程的每一个阶段,讨论实际 Azure 开发中使用的关键概念和术语。
Azure 存储定价和规划
Tim 首先解释了在 C# 应用程序中使用 Azure Storage 的经济效益。 无论您是使用 blob 容器存储文本文件、图像还是二进制数据,成本都是最低的。 他介绍了 Azure 定价计算器,可根据所选功能(如性能层级、冗余设置和数据操作)估算费用。
Tim 在 Azure 门户的通用 v2 下选择了块 Blob 存储,并为频繁访问的文件配置了热访问层。 他确保存储账户使用本地冗余存储 (LRS),在保证安全的同时最大限度地降低成本。
Tim 解释说:"对于一个存储 1 GB 数据和几千次操作的演示应用程序来说,每月的成本仅为 13 美分。
创建 Azure 存储帐户
在 Azure 门户中,Tim 演示了如何创建新的资源组和相应的 Azure 存储帐户。 命名规范非常严格--存储账户名称必须唯一、小写且不包含破折号。
在设置过程中,他禁用了 Geo-redundant 存储以节省成本,这对于开发原型或本地环境的开发人员来说是一个至关重要的提示。 他还启用了容器级别的匿名访问,但仅用于演示目的--警告实际生产环境需要安全访问。

Tim 还介绍了访问密钥、连接字符串和存储账户名称,这些都是 C# 项目连接 Azure 资源时必不可少的内容。
了解 Azure Blob 存储
Tim 重点介绍了如何使用 blob 容器来组织 Azure 存储账户中的数据。 他避免通过门户手动创建新容器,而是计划使用 Azure SDK for .NET 在代码中生成容器。
他解释说,安全访问密钥和连接字符串(可在账户安全设置下查看)将在应用程序中用于验证存储客户端库。
启动 ASP.NET Core 项目
Tim 使用 Visual Studio 创建了一个 .NET 9 MVC 网络应用程序。 虽然可以使用 Razor Pages 或 Blazor Server 等任何 UI 类型,但他还是选择 MVC 进行演示。
19:35 时,在 secrets.json 中,他安全地存储了敏感凭据:
连接字符串
存储账户密钥
容器名称
- 存储账户名称

Tim 解释说,appsettings.json 不应包含秘密,因为它会提交到源代码库中。 译文中应避免使用 "用户机密",而应使用 "用户机密 "将机密存储在本地,尤其是在开发过程中。
安装所需的 NuGet 软件包
为了与 Azure Blob Storage 交互,Tim 安装了 Azure.Storage.Blobs NuGet 包。 他对微软如何利用 Azure SDK 将功能模块化,从而实现更小、更易维护的应用程序表示赞赏。

Tim指出:"现在你可以通过NuGet获得你所需要的东西,比如Azure Blob客户端库,而不是将所有东西都捆绑到框架中。
Azure 存储的配置选项模式
接下来,Tim 创建了一个 POCO 类(BlobStorageOptions)来匹配配置中的键。他使用选项模式将配置绑定到强类型对象中,从而实现集中化和可测试的配置。
这种设置可以使 .NET 应用程序轻松地在不同环境中一致地使用 Azure 配置。
实现 Blob 存储服务逻辑
Tim 添加了一个名为 DataAccess 的新文件夹,并实现了一个名为 BlobStorage.cs 的类。 在内部,他使用 IOptions
他构建了两种主要的异步方法:
上传文件逻辑
UploadFileAsync 方法:
从 MVC 前端接收 IFormFile。
使用连接字符串和容器名称从 Azure Storage SDK 创建 BlobContainerClient。
检查现有容器,如果不存在,则创建新容器。
将访问策略设置为 "无",确保容器不会被公众访问。
- 使用 BlobClient 对象从流上传文件。
Tim 使用 using 语句和 await 调用安全地处理文件流,防止内存泄漏。
下载文件逻辑
在 DownloadFileAsync 中,Tim:
接受字符串文件名或完整 blob URI。
使用 URI 和安全凭证构建新的 BlobClient。
使用 DownloadStreamingAsync 下载文件。
- 在 FileContentResult 中封装流,以便从浏览器下载。
这将确保文件的安全性,并且只能通过应用程序访问,而不能直接通过 URL 猜测。
使用依赖注入注册 Blob 存储
Tim 为他的类定义了一个接口 (IBlobStorage),并在 .NET DI 容器中将其注册为一个单例。 由于该类是无状态的,只使用配置值,因此最好使用 Singleton。
与 MVC 应用程序集成
修改主控制器以使用 IBlobStorage。 翻译内容包括
一个 UploadFile POST 方法,用于验证输入并调用 UploadFileAsync。
- GetFile POST 方法会检查 URL,然后调用 DownloadFileAsync。
每种方法都与存储客户端交互,以安全地处理 blob 文件,无论是上传还是下载。
文件操作的 Razor 视图用户界面
在 Index.cshtml 中,Tim 设置了:
使用 input type="file" 和 Bootstrap 风格设计上传文件的表单。
使用 URI 下载文件的第二种形式。
对丢失文件或无效 URI 等边缘情况进行错误消息处理。
- 显示部分,显示成功上传后生成的 blob URI (https)。
Tim 还使用 List
测试和验证文件安全性
Tim 上传了一个文本文件,并尝试在浏览器中直接访问 URI--不出所料,由于 "无 "访问策略,访问失败。
临时更改 Azure 门户的访问级别后,就可以通过直接链接下载文件了。 但他很快将其还原为私人语言,强调 Azure 如何提供细粒度的安全控制。
Tim 的最终建议
最后,Tim 提醒开发人员,即使投资很少,Microsoft Azure 也能提供很多价值。 这些工具包括
NuGet 软件包
Azure SDK
Visual Studio
Azure 门户网站
- 安全连接字符串和密钥
您可以使用 C# 快速构建生产就绪的存储解决方案。 无论您是在开发大型系统还是小型测试项目,Azure Blob Storage 都是一个可扩展且经济高效的选择。
Tim强调说:"在云中使用什么,就要为什么付费,所以只需要你所需要的。
摘要
从创建存储账户和配置 blob 容器,到在 MVC 应用程序中安全地处理上传和下载,Tim Corey 提供的详细说明涵盖了使用 .NET 的 Azure Storage 的整个生命周期。
有了本指南和 Tim 的视频,您就可以放心地开始使用 Azure Blob Storage,同时保持控制、降低成本并遵守云开发的最佳实践。
请查看他的完整视频,进一步了解其清晰度,并查看他的 YouTube 频道,了解有关 Azure 存储 (C#) 的更多精辟内容。

