連接到媒體服務 v3 API - .NET
警告
Azure 媒體服務將於 2024 年 6 月 30 日淘汰。 如需詳細資訊,請參閱 AMS淘汰指南。
本文說明如何使用服務主體登入方法來連線到 Azure 媒體服務 v3 .NET SDK。
Prerequisites
- 建立媒體服務帳戶。 請務必記住資源群組名稱和「媒體服務」帳戶名稱
- 安裝要用於 .NET 開發的工具。 本文中的步驟說明如何使用 Visual Studio 2019 Community 版本。 您可以使用 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
。
Package | 描述 |
---|---|
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.Azure);
}
private static async Task<IAzureMediaServicesClient> CreateMediaServicesClientAsync(ConfigWrapper config)
{
var credentials = await GetCredentialsAsync(config);
return new AzureMediaServicesClient(config.ArmEndpoint, credentials)
{
SubscriptionId = config.SubscriptionId,
};
}
}
}
取得說明及支援
您可以連絡媒體服務並詢問問題,或依照下列其中一種方法追蹤我們的更新:
- 問與答
-
Stack Overflow。 使用
azure-media-services
標記問題。 - @MSFTAzureMedia 或使用 @AzureSupport 來要求支援。
- 透過 Azure 入口網站 開啟支援票證。