You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Microsoft.WindowsAzure.Storage升级到Azure.Storage.Common?

Azure Blob存储视频服务从WindowsAzure.Storage迁移至Azure.Storage.Blobs教程及代码示例

背景

在MVC应用中使用Microsoft.WindowsAzure.Storage实现了Azure Blob存储的视频流服务,该包已在2023年3月31日弃用,需升级至官方推荐的Azure.Storage.Blobs包(注:微软提及的Azure.Storage.Common是基础依赖,实际Blob操作需安装Azure.Storage.Blobs)。以下是完整的迁移步骤及代码转换示例。

迁移步骤

  • 卸载旧NuGet包:Microsoft.WindowsAzure.Storage
  • 安装新NuGet包:Azure.Storage.Blobs(会自动引入Azure.Storage.Common等依赖)
  • 替换代码中的命名空间
  • 调整Blob客户端、容器、Blob实例的初始化逻辑
  • 更新SAS Token生成方式

转换后的控制器代码

using System;
using System.Configuration;
using System.Web.Mvc;
// 替换为新的命名空间
using Azure.Storage;
using Azure.Storage.Blobs;
using Azure.Storage.Sas;

namespace MyPlatform.Controllers
{
    [Authorize(Roles = "Admin")]
    public class MyController : Controller
    {
        /// <summary>
        /// 视频流测试页面
        /// </summary>
        /// <returns>Videos视图</returns>
        public ActionResult Videos()
        {
            // 从Web.config读取配置
            string accountName = ConfigurationManager.AppSettings["Storage:AccountName"];
            string keyValue = ConfigurationManager.AppSettings["Storage:KeyValue"];
            string containerName = ConfigurationManager.AppSettings["Storage:ContainerName"];
            string videoName = ConfigurationManager.AppSettings["Storage:VideoName"];

            // 初始化存储凭据
            var credentials = new StorageSharedKeyCredential(accountName, keyValue);
            // 构建Blob服务客户端
            var blobServiceClient = new BlobServiceClient(
                new Uri($"https://{accountName}.blob.core.windows.net"), 
                credentials);
            // 获取容器引用
            var containerClient = blobServiceClient.GetBlobContainerClient(containerName);
            // 获取Blob引用
            var blobClient = containerClient.GetBlobClient(videoName);

            // 生成SAS Token
            var sasBuilder = new BlobSasBuilder()
            {
                BlobContainerName = containerName,
                BlobName = videoName,
                ExpiresOn = DateTime.UtcNow.AddHours(1),
                Protocol = SasProtocol.Https // 强制使用HTTPS
            };
            // 设置读取权限
            sasBuilder.SetPermissions(BlobSasPermissions.Read);
            // 生成SAS Token字符串
            string sasToken = sasBuilder.ToSasQueryParameters(credentials).ToString();

            // 构建完整的视频访问URL
            string videoUrl = $"{blobClient.Uri}?{sasToken}";

            ViewData["Video"] = videoUrl;

            return View();
        }
    }
}

视图代码(无需修改)

@{
    ViewBag.Title = "Videos";
    Layout = "~/Views/Shared/_MyLayout.cshtml";

    var videoUrl = (string)ViewData["Video"];
 
}

<h2>Videos</h2>

<p>视频流测试页面</p>

<video controls controlslist="nodownload" disablepictureinpicture>
    <source src=@videoUrl type="video/mp4">
</video>

关键变化说明

  • 命名空间:从Microsoft.WindowsAzure.Storage.*替换为Azure.Storage.*和Azure.Storage.Blobs.*
  • 凭据初始化:使用StorageSharedKeyCredential替代旧的StorageCredentials
  • 客户端初始化:直接构建BlobServiceClient,不再通过CloudStorageAccount创建客户端
  • SAS Token生成:使用BlobSasBuilder替代旧的SharedAccessBlobPolicy,API更直观且支持更多配置项
  • URL构建:SAS Token需要以?拼接在Blob URI后,旧版本直接拼接的方式不再适用

内容的提问来源于stack exchange,提问作者Martin Vaughan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 03:22:26