连接到媒体服务 v3 API - .NET
警告
Azure 媒体服务将于 2024 年 6 月 30 日停用。 有关详细信息,请参阅 AMS 停用指南。
本文介绍如何使用服务主体登录方法连接到 Azure 媒体服务 v3 .NET SDK。
先决条件
- 创建媒体服务帐户。 请务必记住资源组名称和媒体服务帐户名称
- 安装用于 .NET 开发的工具。 本文中的步骤演示如何使用 Visual Studio 2019 Community Edition。 你也可以使用 Visual Studio Code,具体请参阅使用 C#。 或者,可以使用其他代码编辑器。
重要
查看命名约定。
创建控制台应用程序
- 启动 Visual Studio。
- 在“文件”菜单中,单击“新建”>“项目”。
- 创建 .NET Core 控制台应用程序。
本主题中的示例应用面向 netcoreapp2.0
。 代码使用从 C# 7.1 开始提供的“async main”。 有关更多详细信息,请参阅此博客。
添加所需的 NuGet 包/程序集
- 在 Visual Studio 中,选择“工具”>“NuGet 包管理器”>“NuGet 管理器控制台”。
- 在“包管理器控制台”窗口中,使用
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
- 转到“常规”>“文本文件”。
- 将其命名为“appsettings.json”。
- 将此 .json 文件的“复制到输出目录”属性设置为“如果较新则复制”(使应用程序能够在发布时访问此文件)。
设置 appsettings.json 中的值
根据访问 API 中所述运行 az ams account sp create
命令。 该命令返回要复制到“appsettings.json”中的 JSON。
添加配置文件
为方便起见,请添加负责从“appsettings.json”读取值的配置文件。
- 将新的 .cs 类添加到项目。 将它命名为
ConfigWrapper
。 - 将以下代码粘贴到此文件中(本示例假设命名空间为
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 对象。
- 打开
Program.cs
。 - 粘贴以下代码:
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,
};
}
}
}