В последнем посте о Windows Azure Media Service (Media Service) я рассказал о том, как вы можете управлять активами с помощью REST API. Вы можете прочитать этот пост здесь: http://gauravmantri.com/2012/10/10/windows-azure-media-service-part-iii-managing-assets-via-rest-api/ .
В этой статье я расскажу о том, как управлять политиками доступа с помощью REST API. В этом посте широко используются концепции, описанные в предыдущих постах, поэтому я бы рекомендовал вам сначала ознакомиться с ними.
Давайте взломать !!!
Определение
Проще говоря, политика доступа определяет разрешения и продолжительность доступа к активу . Для объяснения вы могли бы создать политику доступа, которая предоставляла бы, скажем, разрешение на чтение актива в течение 60 минут .
Из определения может показаться, что вы создаете политику доступа для актива, то есть отношения типа один к одному, однако это не так. Политики доступа и активы имеют общие отношения . Это означает, что вы можете определить политику доступа и применить эту политику доступа к одному или нескольким ресурсам. Точно так же актив может иметь одну или несколько политик доступа. Связь между ними облегчается тем, что называется « локаторами ». Мы расскажем о локаторах в одном из следующих постов, но сейчас давайте просто определим его: локатор — это URI, который обеспечивает доступ к конкретному ресурсу на основе времени.
Сущность политики доступа
Субъект политики доступа определяет абстрактную концепцию политики доступа в медиа — услугах. Вы можете прочитать об атрибутах объекта политики доступа здесь на MSDN: http://msdn.microsoft.com/en-us/library/windowsazure/hh974297.aspx#accesspolicy_properties .
Исходя из этого, мы создадим наш собственный класс. Давайте назовем это AccessPolicy . Вот код для этого:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Globalization; using System.Net; using System.IO; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace WAMSRestWrapper { /// <summary> /// Class representing an access policy in a media service /// </summary> public class AccessPolicy { private readonly MediaServiceContext _context; /// <summary> /// Creates an instance of <see cref="AccessPolicy"/> /// </summary> /// <param name="context"> /// <see cref="MediaServiceContext"/> /// </param> internal AccessPolicy(MediaServiceContext context) { _context = context; } /// <summary> /// Creates an instance of <see cref="AccessPolicy"/> /// </summary> /// <param name="context"> /// <see cref="MediaServiceContext"/> /// </param> /// <param name="id"> /// Access policy id /// </param> internal AccessPolicy(MediaServiceContext context, string id) : this(context) { Id = id; } /// <summary> /// Creates an instance of <see cref="AccessPolicy"/> /// </summary> /// <param name="context"> /// <see cref="MediaServiceContext"/> /// </param> /// <param name="name"> /// Access policy friendly name. /// </param> /// <param name="durationInMinutes"> /// Timespan for which this access policy will be effective. /// </param> /// <param name="permissions"> /// Effective permissions /// </param> internal AccessPolicy(MediaServiceContext context, string name, TimeSpan durationInMinutes, AccessPolicyPermission permissions) : this(context) { Name = name; DurationInMinutes = durationInMinutes; Permissions = permissions; } /// <summary> /// Access policy Id. /// </summary> public string Id { get; internal set; } /// <summary> /// Access policy friendly name. /// </summary> public string Name { get; internal set; } /// <summary> /// Timespan for which this access policy will be effective. /// </summary> public TimeSpan DurationInMinutes { get; internal set; } /// <summary> /// Effective permissions /// </summary> public AccessPolicyPermission Permissions { get; internal set; } /// <summary> /// Date/time access policy was created. /// </summary> public DateTime Created { get; internal set; } /// <summary> /// Date/time access policy was last modified. /// </summary> public DateTime LastModified { get; internal set; } } public enum AccessPolicyPermission { None = 0, Read = 1, Write = 2, Delete = 4, List = 8, } }
операции
REST API позволяет выполнять следующие операции над политикой доступа:
- Создайте
- Удалить
- Список
Остальная часть сообщения в блоге будет посвящена этим операциям.
Создайте
Как следует из названия, эта операция создаст новую политику доступа для медиа-службы. Несколько вещей, чтобы рассмотреть здесь:
Конечная точка | https://wamsbluclus001rest-hs.cloudapp.net/API/AccessPolicies
ИЛИ URI, полученный при проверке перенаправления (см. раздел « Подключение к службе мультимедиа » в записи блога об управлении активами), и добавьте к нему «AccessPolicies». |
HTTP метод | ПОЧТА |
Заголовки запроса | DataServiceVersion
MaxDataServiceVersion x-ms-версия Авторизация |
Запросить тип контента | Применение / JSON; OData = многословным |
принимать | Применение / JSON; OData = многословным |
Формат тела запроса | {
«Имя»: «<Имя политики доступа>», «DurationInMinutes»: «100», «Разрешения»: «<Разрешение политики доступа (как целое число)» } например { «Имя»: «Тестировать политику доступа», «DurationInMinutes «:» 100 «, » Разрешения «:» 2 » } |
Вот код для создания политики доступа:
/// <summary> /// Creates an access policy. /// </summary> public void Create() { if (string.IsNullOrWhiteSpace(Name)) { Name = Guid.NewGuid().ToString(); } string accessPolicyCreateRequestPayloadFormat = @"{0} ""Name"": ""{1}"", ""DurationInMinutes"": ""{2}"", ""Permissions"":""{3}"" {4}"; string requestBody = string.Format(CultureInfo.InvariantCulture, accessPolicyCreateRequestPayloadFormat, "{", Name, DurationInMinutes.TotalMinutes, (int)Permissions, "}"); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(CultureInfo.InvariantCulture, "{0}AccessPolicies/", _context.WamsEndpoint)); request.Method = HttpVerbs.Post; request.ContentType = RequestContentType.Json; request.Accept = RequestContentType.Json; request.Headers.Add(RequestHeaders.XMsVersion, RequestHeaderValues.XMsVersion); request.Headers.Add(RequestHeaders.Authorization, string.Format(CultureInfo.InvariantCulture, RequestHeaderValues.Authorization, _context.AccessToken)); request.Headers.Add(RequestHeaders.DataServiceVersion, RequestHeaderValues.DataServiceVersion); request.Headers.Add(RequestHeaders.MaxDataServiceVersion, RequestHeaderValues.MaxDataServiceVersion); request.ContentLength = Encoding.UTF8.GetByteCount(requestBody); using (StreamWriter streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write(requestBody); } using (var response = (HttpWebResponse)request.GetResponse()) { using (StreamReader streamReader = new StreamReader(response.GetResponseStream(), true)) { var returnBody = streamReader.ReadToEnd(); JObject responseJsonObject = JObject.Parse(returnBody); var d = responseJsonObject["d"]; Id = d.Value<string>("Id"); DurationInMinutes = TimeSpan.FromMinutes(d.Value<double>("DurationInMinutes")); Permissions = (AccessPolicyPermission)d.Value<int>("Permissions"); Name = d.Value<string>("Name"); Created = d.Value<DateTime>("Created"); LastModified = d.Value<DateTime>("LastModified"); } } }
и вспомогательный код для вызова этой функции:
var accessPolicy = context.GetAccessPolicyReference("Test", TimeSpan.FromMinutes(10), AccessPolicyPermission.Read | AccessPolicyPermission.Write); accessPolicy.Create();
Удалить
Опять же, как следует из названия, эта операция удаляет существующую политику. Несколько вещей, чтобы рассмотреть здесь:
Конечная точка | https://wamsbluclus001rest-hs.cloudapp.net/API/AccessPolicies(‘<access policy id ‘>)
ИЛИ URI, полученный при проверке перенаправления (см. раздел « Подключение к службе мультимедиа » в записи блога об управлении активами ) и добавьте к нему «AccessPolicies (« <идентификатор политики доступа> »)» [Не забудьте заменить <идентификатор политики доступа> фактическим значением идентификатора политики доступа |
HTTP метод | УДАЛИТЬ |
Заголовки запроса | DataServiceVersion
MaxDataServiceVersion x-ms-версия Авторизация |
Вот код для удаления политики доступа:
/// <summary> /// Deletes the access policy. /// </summary> public void Delete() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(CultureInfo.InvariantCulture, "{0}AccessPolicies('{1}')", _context.WamsEndpoint, Id)); request.Method = HttpVerbs.Delete; request.Headers.Add(RequestHeaders.XMsVersion, RequestHeaderValues.XMsVersion); request.Headers.Add(RequestHeaders.Authorization, string.Format(CultureInfo.InvariantCulture, RequestHeaderValues.Authorization, _context.AccessToken)); request.Headers.Add(RequestHeaders.DataServiceVersion, RequestHeaderValues.DataServiceVersion); request.Headers.Add(RequestHeaders.MaxDataServiceVersion, RequestHeaderValues.MaxDataServiceVersion); var response = (HttpWebResponse)request.GetResponse(); }
и вспомогательный код для вызова этой функции:
var accessPolicyId = "<access policy id>"; var accessPolicy = context.GetAccessPolicyReference(accessPolicyId); accessPolicy.Delete();
Список
Операция со списком позволяет получать информацию о политиках доступа. Используя эту операцию, вы можете
- Получить информацию обо всех политиках доступа для данной медиа-службы
- Получить информацию о конкретной политике доступа в медиа-сервисе
- Получить информацию обо всех политиках доступа, связанных с активом
Как упоминалось выше, связь между политикой доступа и активом устанавливается с помощью локатора, и, поскольку мы еще не рассмотрели локатор, мы не будем рассматривать третий вариант в этом посте.
Получить информацию обо всех политиках доступа для данной медиа-службы
Как видно из заголовка, вы можете получить информацию обо всех политиках доступа для данной медиа-службы. Несколько вещей, чтобы рассмотреть здесь
Конечная точка | https://wamsbluclus001rest-hs.cloudapp.net/API/AccessPolicies
ИЛИ URI, полученный при проверке перенаправления (см. раздел « Подключение к службе мультимедиа » в записи блога об управлении активами), и добавьте к нему «AccessPolicies». |
HTTP метод | ПОЛУЧИТЬ |
Заголовки запроса | DataServiceVersion
MaxDataServiceVersion x-ms-версия Авторизация |
принимать | Применение / JSON; OData = многословным |
Вот код для получения информации обо всех политиках доступа:
/// <summary> /// List all access policies in a media service. /// </summary> /// <returns> /// </returns> public IEnumerable<AccessPolicy> ListAccessPolicies() { List<AccessPolicy> accessPolicies = new List<AccessPolicy>(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(CultureInfo.InvariantCulture, "{0}AccessPolicies", WamsEndpoint)); request.Accept = RequestContentType.Json; request.Method = HttpVerbs.Get; request.Headers.Add(RequestHeaders.XMsVersion, RequestHeaderValues.XMsVersion); request.Headers.Add(RequestHeaders.Authorization, string.Format(CultureInfo.InvariantCulture, RequestHeaderValues.Authorization, AccessToken)); request.Headers.Add(RequestHeaders.DataServiceVersion, RequestHeaderValues.DataServiceVersion); request.Headers.Add(RequestHeaders.MaxDataServiceVersion, RequestHeaderValues.MaxDataServiceVersion); using (var response = (HttpWebResponse)request.GetResponse()) { using (StreamReader streamReader = new StreamReader(response.GetResponseStream(), true)) { var returnBody = streamReader.ReadToEnd(); JObject responseJsonObject = JObject.Parse(returnBody); var items = responseJsonObject["d"]["results"]; foreach (var d in items) { var Id = d.Value<string>("Id"); var DurationInMinutes = TimeSpan.FromMinutes(d.Value<double>("DurationInMinutes")); var Permissions = (AccessPolicyPermission)d.Value<int>("Permissions"); var Name = d.Value<string>("Name"); var Created = d.Value<DateTime>("Created"); var LastModified = d.Value<DateTime>("LastModified"); accessPolicies.Add(new AccessPolicy(this, Id) { Name = Name, DurationInMinutes = DurationInMinutes, Permissions = Permissions, Created = Created, LastModified = LastModified, }); } } } return accessPolicies; }
и вспомогательный код для вызова этой функции:
var accessPolicies = context.ListAccessPolicies();
Получить информацию о конкретной политике доступа в медиа-сервисе
Вы также можете получить информацию о конкретной политике доступа в медиа-сервисе. Для этого вам нужно знать Id этой политики доступа. Несколько вещей, чтобы рассмотреть здесь:
Конечная точка | https://wamsbluclus001rest-hs.cloudapp.net/API/AccessPolicies(‘<access policy id ‘>)
ИЛИ URI, полученный при проверке перенаправления (см. раздел « Подключение к службе мультимедиа » в записи блога об управлении активами ) и добавьте к нему «AccessPolicies (« <идентификатор политики доступа> »)» [Не забудьте заменить <идентификатор политики доступа> фактическим значением идентификатора политики доступа |
HTTP метод | ПОЛУЧИТЬ |
Заголовки запроса | DataServiceVersion
MaxDataServiceVersion x-ms-версия Авторизация |
принимать | Применение / JSON; OData = многословным |
Вот код для получения информации обо всех политиках доступа:
/// <summary> /// Gets information about an access policy. /// </summary> public void Get() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(CultureInfo.InvariantCulture, "{0}AccessPolicies('{1}')", _context.WamsEndpoint, Id)); request.Method = HttpVerbs.Get; request.Accept = RequestContentType.Json; request.Headers.Add(RequestHeaders.XMsVersion, RequestHeaderValues.XMsVersion); request.Headers.Add(RequestHeaders.Authorization, string.Format(CultureInfo.InvariantCulture, RequestHeaderValues.Authorization, _context.AccessToken)); request.Headers.Add(RequestHeaders.DataServiceVersion, RequestHeaderValues.DataServiceVersion); request.Headers.Add(RequestHeaders.MaxDataServiceVersion, RequestHeaderValues.MaxDataServiceVersion); using (var response = (HttpWebResponse)request.GetResponse()) { using (StreamReader streamReader = new StreamReader(response.GetResponseStream(), true)) { var returnBody = streamReader.ReadToEnd(); JObject responseJsonObject = JObject.Parse(returnBody); var d = responseJsonObject["d"]; Id = d.Value<string>("Id"); DurationInMinutes = TimeSpan.FromMinutes(d.Value<double>("DurationInMinutes")); Permissions = (AccessPolicyPermission)d.Value<int>("Permissions"); Name = d.Value<string>("Name"); Created = d.Value<DateTime>("Created"); LastModified = d.Value<DateTime>("LastModified"); } } }
и вспомогательный код для вызова этой функции:
var accessPolicyId = "<access policy id>"; var accessPolicy = context.GetAccessPolicyReference(accessPolicyId); accessPolicy.Get();
Получить информацию обо всех политиках доступа, связанных с активом
Вы также можете получить все политики доступа, связанные с активом. Несмотря на то, что я не буду писать здесь код для этого по причинам, которые я упомянул выше, я все же хочу упомянуть о вещах, которые вам необходимо учитывать, если вы хотите написать код для того же. Итак, вот они:
Конечная точка | https://wamsbluclus001rest-hs.cloudapp.net/API/Assets(‘assetid’)/AccessPolicies
ИЛИ URI, полученный при проверке перенаправления (см. раздел « Подключение к медиа-службе » в записи блога об управлении активами) и добавьте к этому «Assets (‘<assembly>>) / AccessPolicies» [Не забудьте заменить <assetid> фактическим значением сборки |
HTTP метод | ПОЛУЧИТЬ |
Заголовки запроса | DataServiceVersion
MaxDataServiceVersion x-ms-версия Авторизация |
принимать | Применение / JSON; OData = многословным |
Завершение
В этом посте мы узнали о REST API для управления политиками доступа в Media Service. Вот полный исходный код того, что мы уже сделали. Как я уже говорил в моем предыдущем посте, это определенно не лучший код и требует много оптимизации / рефакторинга. Пожалуйста, не стесняйтесь изменять код в соответствии с вашими потребностями.
MediaServiceContext.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Web; using Newtonsoft.Json; using System.Globalization; using System.IO; using Newtonsoft.Json.Linq; namespace WAMSRestWrapper { public class MediaServiceContext { private const string acsEndpoint = "https://wamsprodglobal001acs.accesscontrol.windows.net/v2/OAuth2-13"; private const string acsRequestBodyFormat = "grant_type=client_credentials&client_id={0}&client_secret={1}&scope=urn%3aWindowsAzureMediaServices"; private string _accountName; private string _accountKey; private string _accessToken; private DateTime _accessTokenExpiry; private string _wamsEndpoint = "https://wamsbluclus001rest-hs.cloudapp.net/API/"; /// <summary> /// Creates a new instance of <see cref="MediaServiceContext"/> /// </summary> /// <param name="accountName"> /// Media service account name. /// </param> /// <param name="accountKey"> /// Media service account key. /// </param> public MediaServiceContext(string accountName, string accountKey) { this._accountName = accountName; this._accountKey = accountKey; } /// <summary> /// Gets the access token. If access token is not yet fetched or the access token has expired, /// it gets a new access token. /// </summary> public string AccessToken { get { if (string.IsNullOrWhiteSpace(_accessToken) || _accessTokenExpiry < DateTime.UtcNow) { var tuple = FetchAccessToken(); _accessToken = tuple.Item1; _accessTokenExpiry = tuple.Item2; } return _accessToken; } } /// <summary> /// Gets the endpoint for making REST API calls. /// </summary> public string WamsEndpoint { get { return _wamsEndpoint; } } /// <summary> /// This function makes the web request and gets the access token. /// </summary> /// <returns> /// <see cref="System.Tuple"/> containing 2 items - /// 1. The access token. /// 2. Token expiry date/time. /// </returns> private Tuple<string, DateTime> FetchAccessToken() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(acsEndpoint); request.Method = HttpVerbs.Post; string requestBody = string.Format(CultureInfo.InvariantCulture, acsRequestBodyFormat, _accountName, HttpUtility.UrlEncode(_accountKey)); request.ContentLength = Encoding.UTF8.GetByteCount(requestBody); request.ContentType = "application/x-www-form-urlencoded"; using (StreamWriter streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write(requestBody); } using (var response = (HttpWebResponse)request.GetResponse()) { using (StreamReader streamReader = new StreamReader(response.GetResponseStream(), true)) { var returnBody = streamReader.ReadToEnd(); var acsToken = JsonConvert.DeserializeObject<AcsToken>(returnBody); return new Tuple<string, DateTime>(acsToken.access_token, DateTime.UtcNow.AddSeconds(acsToken.expires_in)); } } } /// <summary> /// This function checks if we need to redirect all WAMS requests. /// </summary> public void CheckForRedirection() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(WamsEndpoint); request.AllowAutoRedirect = false; request.Headers.Add(RequestHeaders.XMsVersion, RequestHeaderValues.XMsVersion); request.Headers.Add(RequestHeaders.Authorization, string.Format(CultureInfo.InvariantCulture, RequestHeaderValues.Authorization, AccessToken)); request.Method = HttpVerbs.Get; using (var response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode == HttpStatusCode.Moved || response.StatusCode == HttpStatusCode.MovedPermanently) { string newLocation = response.Headers["Location"]; if (!newLocation.Equals(_wamsEndpoint)) { _wamsEndpoint = newLocation; _accessToken = string.Empty;//So that we can force to get a new access token. _accessTokenExpiry = DateTime.MinValue; } } } } public Asset GetAssetReference(string assetId) { return new Asset(this, assetId); } public Asset GetAssetReference() { return new Asset(this); } /// <summary> /// List all assets in a media service. /// </summary> /// <returns> /// </returns> public IEnumerable<Asset> ListAssets() { List<Asset> assets = new List<Asset>(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(CultureInfo.InvariantCulture, "{0}Assets", WamsEndpoint)); request.Accept = RequestContentType.Json; request.Method = HttpVerbs.Get; request.Headers.Add(RequestHeaders.XMsVersion, RequestHeaderValues.XMsVersion); request.Headers.Add(RequestHeaders.Authorization, string.Format(CultureInfo.InvariantCulture, RequestHeaderValues.Authorization, AccessToken)); request.Headers.Add(RequestHeaders.DataServiceVersion, RequestHeaderValues.DataServiceVersion); request.Headers.Add(RequestHeaders.MaxDataServiceVersion, RequestHeaderValues.MaxDataServiceVersion); using (var response = (HttpWebResponse)request.GetResponse()) { using (StreamReader streamReader = new StreamReader(response.GetResponseStream(), true)) { var returnBody = streamReader.ReadToEnd(); JObject responseJsonObject = JObject.Parse(returnBody); var items = responseJsonObject["d"]["results"]; foreach (var d in items) { var Id = d.Value<string>("Id"); var State = (AssetState)d.Value<int>("State"); var Options = (AssetEncryptionOption)d.Value<int>("Options"); var AlternateId = d.Value<string>("AlternateId"); var Created = d.Value<DateTime>("Created"); var LastModified = d.Value<DateTime>("LastModified"); var Name = d.Value<string>("Name"); assets.Add(new Asset(this, Id) { Name = Name, State = State, Options = Options, AlternateId = AlternateId, Created = Created, LastModified = LastModified, }); } } } return assets; } public AccessPolicy GetAccessPolicyReference(string accessPolicyId) { return new AccessPolicy(this, accessPolicyId); } public AccessPolicy GetAccessPolicyReference(string name, TimeSpan durationInMinutes, AccessPolicyPermission permission) { return new AccessPolicy(this, name, durationInMinutes, permission); } /// <summary> /// List all access policies in a media service. /// </summary> /// <returns> /// </returns> public IEnumerable<AccessPolicy> ListAccessPolicies() { List<AccessPolicy> accessPolicies = new List<AccessPolicy>(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(CultureInfo.InvariantCulture, "{0}AccessPolicies", WamsEndpoint)); request.Accept = RequestContentType.Json; request.Method = HttpVerbs.Get; request.Headers.Add(RequestHeaders.XMsVersion, RequestHeaderValues.XMsVersion); request.Headers.Add(RequestHeaders.Authorization, string.Format(CultureInfo.InvariantCulture, RequestHeaderValues.Authorization, AccessToken)); request.Headers.Add(RequestHeaders.DataServiceVersion, RequestHeaderValues.DataServiceVersion); request.Headers.Add(RequestHeaders.MaxDataServiceVersion, RequestHeaderValues.MaxDataServiceVersion); using (var response = (HttpWebResponse)request.GetResponse()) { using (StreamReader streamReader = new StreamReader(response.GetResponseStream(), true)) { var returnBody = streamReader.ReadToEnd(); JObject responseJsonObject = JObject.Parse(returnBody); var items = responseJsonObject["d"]["results"]; foreach (var d in items) { var Id = d.Value<string>("Id"); var DurationInMinutes = TimeSpan.FromMinutes(d.Value<double>("DurationInMinutes")); var Permissions = (AccessPolicyPermission)d.Value<int>("Permissions"); var Name = d.Value<string>("Name"); var Created = d.Value<DateTime>("Created"); var LastModified = d.Value<DateTime>("LastModified"); accessPolicies.Add(new AccessPolicy(this, Id) { Name = Name, DurationInMinutes = DurationInMinutes, Permissions = Permissions, Created = Created, LastModified = LastModified, }); } } } return accessPolicies; } } }
AccessPolicy.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Globalization; using System.Net; using System.IO; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace WAMSRestWrapper { /// <summary> /// Class representing an access policy in a media service /// </summary> public class AccessPolicy { private readonly MediaServiceContext _context; /// <summary> /// Creates an instance of <see cref="AccessPolicy"/> /// </summary> /// <param name="context"> /// <see cref="MediaServiceContext"/> /// </param> internal AccessPolicy(MediaServiceContext context) { _context = context; } /// <summary> /// Creates an instance of <see cref="AccessPolicy"/> /// </summary> /// <param name="context"> /// <see cref="MediaServiceContext"/> /// </param> /// <param name="id"> /// Access policy id /// </param> internal AccessPolicy(MediaServiceContext context, string id) : this(context) { Id = id; } /// <summary> /// Creates an instance of <see cref="AccessPolicy"/> /// </summary> /// <param name="context"> /// <see cref="MediaServiceContext"/> /// </param> /// <param name="name"> /// Access policy friendly name. /// </param> /// <param name="durationInMinutes"> /// Timespan for which this access policy will be effective. /// </param> /// <param name="permissions"> /// Effective permissions /// </param> internal AccessPolicy(MediaServiceContext context, string name, TimeSpan durationInMinutes, AccessPolicyPermission permissions) : this(context) { Name = name; DurationInMinutes = durationInMinutes; Permissions = permissions; } /// <summary> /// Access policy Id. /// </summary> public string Id { get; internal set; } /// <summary> /// Access policy friendly name. /// </summary> public string Name { get; internal set; } /// <summary> /// Timespan for which this access policy will be effective. /// </summary> public TimeSpan DurationInMinutes { get; internal set; } /// <summary> /// Effective permissions /// </summary> public AccessPolicyPermission Permissions { get; internal set; } /// <summary> /// Date/time access policy was created. /// </summary> public DateTime Created { get; internal set; } /// <summary> /// Date/time access policy was last modified. /// </summary> public DateTime LastModified { get; internal set; } /// <summary> /// Creates an access policy. /// </summary> public void Create() { if (string.IsNullOrWhiteSpace(Name)) { Name = Guid.NewGuid().ToString(); } string accessPolicyCreateRequestPayloadFormat = @"{0} ""Name"": ""{1}"", ""DurationInMinutes"": ""{2}"", ""Permissions"":""{3}"" {4}"; string requestBody = string.Format(CultureInfo.InvariantCulture, accessPolicyCreateRequestPayloadFormat, "{", Name, DurationInMinutes.TotalMinutes, (int)Permissions, "}"); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(CultureInfo.InvariantCulture, "{0}AccessPolicies", _context.WamsEndpoint)); request.Method = HttpVerbs.Post; request.ContentType = RequestContentType.Json; request.Accept = RequestContentType.Json; request.Headers.Add(RequestHeaders.XMsVersion, RequestHeaderValues.XMsVersion); request.Headers.Add(RequestHeaders.Authorization, string.Format(CultureInfo.InvariantCulture, RequestHeaderValues.Authorization, _context.AccessToken)); request.Headers.Add(RequestHeaders.DataServiceVersion, RequestHeaderValues.DataServiceVersion); request.Headers.Add(RequestHeaders.MaxDataServiceVersion, RequestHeaderValues.MaxDataServiceVersion); request.ContentLength = Encoding.UTF8.GetByteCount(requestBody); using (StreamWriter streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write(requestBody); } using (var response = (HttpWebResponse)request.GetResponse()) { using (StreamReader streamReader = new StreamReader(response.GetResponseStream(), true)) { var returnBody = streamReader.ReadToEnd(); JObject responseJsonObject = JObject.Parse(returnBody); var d = responseJsonObject["d"]; Id = d.Value<string>("Id"); DurationInMinutes = TimeSpan.FromMinutes(d.Value<double>("DurationInMinutes")); Permissions = (AccessPolicyPermission)d.Value<int>("Permissions"); Name = d.Value<string>("Name"); Created = d.Value<DateTime>("Created"); LastModified = d.Value<DateTime>("LastModified"); } } } /// <summary> /// Deletes the access policy. /// </summary> public void Delete() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(CultureInfo.InvariantCulture, "{0}AccessPolicies('{1}')", _context.WamsEndpoint, Id)); request.Method = HttpVerbs.Delete; request.Headers.Add(RequestHeaders.XMsVersion, RequestHeaderValues.XMsVersion); request.Headers.Add(RequestHeaders.Authorization, string.Format(CultureInfo.InvariantCulture, RequestHeaderValues.Authorization, _context.AccessToken)); request.Headers.Add(RequestHeaders.DataServiceVersion, RequestHeaderValues.DataServiceVersion); request.Headers.Add(RequestHeaders.MaxDataServiceVersion, RequestHeaderValues.MaxDataServiceVersion); var response = (HttpWebResponse)request.GetResponse(); } /// <summary> /// Gets information about an access policy. /// </summary> public void Get() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(CultureInfo.InvariantCulture, "{0}AccessPolicies('{1}')", _context.WamsEndpoint, Id)); request.Method = HttpVerbs.Get; request.Accept = RequestContentType.Json; request.Headers.Add(RequestHeaders.XMsVersion, RequestHeaderValues.XMsVersion); request.Headers.Add(RequestHeaders.Authorization, string.Format(CultureInfo.InvariantCulture, RequestHeaderValues.Authorization, _context.AccessToken)); request.Headers.Add(RequestHeaders.DataServiceVersion, RequestHeaderValues.DataServiceVersion); request.Headers.Add(RequestHeaders.MaxDataServiceVersion, RequestHeaderValues.MaxDataServiceVersion); using (var response = (HttpWebResponse)request.GetResponse()) { using (StreamReader streamReader = new StreamReader(response.GetResponseStream(), true)) { var returnBody = streamReader.ReadToEnd(); JObject responseJsonObject = JObject.Parse(returnBody); var d = responseJsonObject["d"]; Id = d.Value<string>("Id"); DurationInMinutes = TimeSpan.FromMinutes(d.Value<double>("DurationInMinutes")); Permissions = (AccessPolicyPermission)d.Value<int>("Permissions"); Name = d.Value<string>("Name"); Created = d.Value<DateTime>("Created"); LastModified = d.Value<DateTime>("LastModified"); } } } } public enum AccessPolicyPermission { None = 0, Read = 1, Write = 2, Delete = 4, List = 8, } }
Резюме
Вот именно для этого поста. В следующем посте мы рассмотрим дополнительные функции API REST и расширим эту библиотеку. Я надеюсь, что вы нашли эту информацию полезной. Как всегда, если вы обнаружите некоторые проблемы с этим сообщением в блоге, пожалуйста, немедленно сообщите мне, и я исправлю их как можно скорее.
Так долго и следите за обновлениями!