2016-12-16 6 views
0

Любая идея, как вводить заголовки OAuth в PlayReadyLicenseAcquisitionServiceRequest, чтобы они включались в BeginServiceRequest()? Я не могу использовать строку запроса URL-адреса лицензии или вставлять токен OAuth в тело; он должен находиться в заголовке HTTP-запроса на получение лицензии.OAuth in PlayReady Получение лицензии в UWP

+0

Можете ли вы сказать мне, какая версия OAuth вас используют? –

+0

@MikeMa. Это OAuth 1.0, и у меня уже подготовлен заголовок, но я просто не могу понять, как ввести его в запрос лицензии. Если не существует совершенно другого подхода к OAuth, мне не хватает. – Sean

ответ

0

Я нашел большой образец кода здесь:

https://www.eyecatch.no/blog/using-playready-and-smooth-streaming-in-a-windows-10-uwp-app/

, но это был волшебный соус ниже (с моим добавлением заголовка):

public static async Task<bool> RequestLicenseManual(PlayReadyLicenseAcquisitionServiceRequest request, params KeyValuePair<string, object>[] headers) 
    { 
     Debug.WriteLine("ProtectionManager PlayReady Manual License Request in progress"); 

     try 
     { 
      var r = request.GenerateManualEnablingChallenge(); 

      var content = new ByteArrayContent(r.GetMessageBody()); 

      foreach (var header in r.MessageHeaders.Where(x => x.Value != null)) 
      { 
       if (header.Key.Equals("Content-Type", StringComparison.OrdinalIgnoreCase)) 
       { 
        content.Headers.ContentType = MediaTypeHeaderValue.Parse(header.Value.ToString()); 
       } 
       else 
       { 
        content.Headers.Add(header.Key, header.Value.ToString()); 
       } 
      } 

      var msg = new HttpRequestMessage(HttpMethod.Post, r.Uri) { Content = content }; 

      foreach (var header in headers) 
      { 
       msg.Headers.Add(header.Key, header.Value.ToString()); 
      } 

      Debug.WriteLine("Requesting license from {0} with custom data {1}", msg.RequestUri, await msg.Content.ReadAsStringAsync()); 

      var client = new HttpClient(); 
      var response = await client.SendAsync(msg); 

      if (response.IsSuccessStatusCode) 
      { 
       request.ProcessManualEnablingResponse(await response.Content.ReadAsByteArrayAsync()); 
      } 
      else 
      { 
       Debug.WriteLine("ProtectionManager PlayReady License Request failed: " + await response.Content.ReadAsStringAsync()); 

       return false; 
      } 
     } 
     catch (Exception ex) 
     { 
      Debug.WriteLine("ProtectionManager PlayReady License Request failed: " + ex.Message); 

      return false; 
     } 

     Debug.WriteLine("ProtectionManager PlayReady License Request successfull"); 

     return true; 
    }