连接到媒体服务 v3 API - .NET

Media Services logo v3


警告

Azure 媒体服务将于 2024 年 6 月 30 日停用。 有关详细信息,请参阅 AMS 停用指南

本文介绍如何使用服务主体登录方法连接到 Azure 媒体服务 v3 .NET SDK。

先决条件

重要

查看命名约定

创建控制台应用程序

  1. 启动 Visual Studio。
  2. 在“文件”菜单中,单击“新建”>“项目”。
  3. 创建 .NET Core 控制台应用程序。

本主题中的示例应用面向 netcoreapp2.0。 代码使用从 C# 7.1 开始提供的“async main”。 有关更多详细信息,请参阅此博客

添加所需的 NuGet 包/程序集

  1. 在 Visual Studio 中,选择“工具”>“NuGet 包管理器”>“NuGet 管理器控制台”。
  2. 在“包管理器控制台”窗口中,使用 Install-Package 命令添加以下 NuGet 包。 例如,Install-Package Microsoft.Azure.Management.Media
程序包 说明
Microsoft.Azure.Management.Media Azure 媒体服务 SDK。
为确保使用最新的 Azure 媒体服务包,请选中 Microsoft.Azure.Management.Media

其他必需的程序集

  • Azure.Storage.Blobs
  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.EnvironmentVariables
  • Microsoft.Extensions.Configuration.Json
  • Microsoft.Rest.ClientRuntime.Azure.Authentication

创建并配置应用设置文件

创建 appsettings.json

  1. 转到“常规”>“文本文件”。
  2. 将其命名为“appsettings.json”。
  3. 将此 .json 文件的“复制到输出目录”属性设置为“如果较新则复制”(使应用程序能够在发布时访问此文件)。

设置 appsettings.json 中的值

根据访问 API 中所述运行 az ams account sp create 命令。 该命令返回要复制到“appsettings.json”中的 JSON。

添加配置文件

为方便起见,请添加负责从“appsettings.json”读取值的配置文件。

  1. 将新的 .cs 类添加到项目。 将它命名为 ConfigWrapper
  2. 将以下代码粘贴到此文件中(本示例假设命名空间为 ConsoleApp1)。
using System;

using Microsoft.Extensions.Configuration;

namespace ConsoleApp1
{
    public class ConfigWrapper
    {
        private readonly IConfiguration _config;

        public ConfigWrapper(IConfiguration config)
        {
            _config = config;
        }

        public string SubscriptionId
        {
            get { return _config["SubscriptionId"]; }
        }

        public string ResourceGroup
        {
            get { return _config["ResourceGroup"]; }
        }

        public string AccountName
        {
            get { return _config["AccountName"]; }
        }

        public string AadTenantId
        {
            get { return _config["AadTenantId"]; }
        }

        public string AadClientId
        {
            get { return _config["AadClientId"]; }
        }

        public string AadSecret
        {
            get { return _config["AadSecret"]; }
        }

        public Uri ArmAadAudience
        {
            get { return new Uri(_config["ArmAadAudience"]); }
        }

        public Uri AadEndpoint
        {
            get { return new Uri(_config["AadEndpoint"]); }
        }

        public Uri ArmEndpoint
        {
            get { return new Uri(_config["ArmEndpoint"]); }
        }

        public string Location
        {
            get { return _config["Location"]; }
        }
    }
}

连接到 .NET 客户端

若要开始将媒体服务 API 与 .NET 结合使用,需要创建 AzureMediaServicesClient 对象。 若要创建对象,需要提供客户端所需凭据以使用 Azure AD 连接到 Azure。 在以下代码中,GetCredentialsAsync 函数根据本地配置文件中提供的凭据创建 ServiceClientCredentials 对象。

  1. 打开 Program.cs
  2. 粘贴以下代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

using Microsoft.Azure.Management.Media;
using Microsoft.Azure.Management.Media.Models;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Microsoft.Rest;
using Microsoft.Rest.Azure.Authentication;

namespace ConsoleApp1
{
    class Program
    {
        public static async Task Main(string[] args)
        {
            
            ConfigWrapper config = new ConfigWrapper(new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddEnvironmentVariables()
                .Build());

            try
            {
                IAzureMediaServicesClient client = await CreateMediaServicesClientAsync(config);
                Console.WriteLine("connected");
            }
            catch (Exception exception)
            {
                if (exception.Source.Contains("ActiveDirectory"))
                {
                    Console.Error.WriteLine("TIP: Make sure that you have filled out the appsettings.json file before running this sample.");
                }

                Console.Error.WriteLine($"{exception.Message}");

                
                if (exception.GetBaseException() is ErrorResponseException apiException)
                {
                    Console.Error.WriteLine(
                        $"ERROR: API call failed with error code '{apiException.Body.Error.Code}' and message '{apiException.Body.Error.Message}'.");
                }
            }

            Console.WriteLine("Press Enter to continue.");
            Console.ReadLine();
        }
 
        private static async Task<ServiceClientCredentials> GetCredentialsAsync(ConfigWrapper config)
        {
            // Use ApplicationTokenProvider.LoginSilentWithCertificateAsync or UserTokenProvider.LoginSilentAsync to get a token using service principal with certificate
            //// ClientAssertionCertificate
            //// ApplicationTokenProvider.LoginSilentWithCertificateAsync

            // Use ApplicationTokenProvider.LoginSilentAsync to get a token using a service principal with symmetric key
            ClientCredential clientCredential = new ClientCredential(config.AadClientId, config.AadSecret);
            return await ApplicationTokenProvider.LoginSilentAsync(config.AadTenantId, clientCredential, ActiveDirectoryServiceSettings.AzureChina);
        }

        private static async Task<IAzureMediaServicesClient> CreateMediaServicesClientAsync(ConfigWrapper config)
        {
            var credentials = await GetCredentialsAsync(config);

            return new AzureMediaServicesClient(config.ArmEndpoint, credentials)
            {
                SubscriptionId = config.SubscriptionId,
            };
        }

    }
}