2016-04-20 2 views
0

Я ищу образец клиента REST, который может обновить user thumbnailphoto с использованием API графиков Azure AD? REST клиент, чтобы получить там, и она работает https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/users-operations#GetUserThumbnailPhotoПример клиента REST для обновления эскиза Фотография с использованием Azure AD Graph api?

Я попробовал этот пример Java Rest клиента, но получил 405 - Method Not Allowed:

public void updateUserPhotoGraph(ModelMap model) throws IOException { 

     //https://graph.windows.net/{tenant}/users/{user}/thumbnailPhoto?api-version=1.6 
     UriComponents uriComponents = getPhotoUri(); 
     String bearerToken = getBearerToken(); 

     try { 

      HttpClient httpclient = HttpClients.createDefault(); 
      byte[] bytesEncoded = Base64.encode(extractBytes()); 

      URIBuilder builder = new URIBuilder(uriComponents.toString()); 
      URI uri = builder.build(); 
      HttpPost request = new HttpPost(uri); 
      request.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + bearerToken); 
      request.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM); 
      request.setEntity(new ByteArrayEntity(bytesEncoded)); 

      HttpResponse response = httpclient.execute(request); 
      HttpEntity entity = response.getEntity(); 
      if (entity != null) { 
       System.out.println(EntityUtils.toString(entity)); 
      } 
     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } 
    } 

** Изменена выше отправленный запрос PATCH, а также, но получил та же ошибка.

Кто-нибудь использовал этот API для обновления thumnailphoto?
Можем ли мы использовать [https://graph.windows.net/ {арендатор}/пользователей/{user} /thumbnailPhoto?api-version=1.6] для обновления/установки эскиза фотографии?

Каким будет подходящий API для этого?

ответ

0

При поиске в this document, вы могли бы найти свойство «thumbnailPhoto» является тип потока и может использовать PATCH, так что вы можете попробовать использовать ниже API, чтобы обновить эту собственность:

https://graph.windows.net/{tenant}/directoryObjects/{user}/Microsoft.DirectoryServices.User/thumbnailPhoto?api-version=1.5 
+0

Спасибо за ваш ответ. Я попробовал PATCH https://graph.windows.net/{tenent}/directoryObjects/{upn}/Microsoft.DirectoryServices.User/thumbnailPhoto?api-version=1.6 Content-Type: application/octet-stream Тело запроса, содержащее массив байтов GOT ----> {"odata.error": {"code": "Request_BadRequest", "message": {"lang": "en", "value": "URI 'https: //graph.windows.net/{tenent}/directoryObjects/{upn}/Microsoft.DirectoryServices.User/thumbnailPhoto?api-version=1.6 'относится к именованному потоку и недействителен для операции «PATCH». »}} } Кажется, thumbnail поддерживает только GET –

0

Я был в состоянии, чтобы загрузить Jpeg эскиз, используя операцию PUT к URL: тип заголовка https://graph.windows.net/{tenant}/users/{user object id}/thumbnailPhoto?api-version=1.6

содержание должно быть установлено в application/octet-stream и содержание только двоичные данные в формате JPEG.

Мой код находится в Swift, поэтому я не буду показывать его здесь, но я полагаю, что с учетом этой информации не должно быть слишком сложно создать соответствующий Java-код.

1

С помощью приведенных выше ответов я получил рабочее решение в C#. Этот метод работает при вызове со следующими переменными:

nuget: ADAL v2.19.

authContext = новый AuthenticationContext ("https://login.microsoftonline.com/ "+ арендатором)

Globals.aadGraphResourceId =" https://graph.windows.net/"

учетных = новый ClientCredential (ClientID, clientSecret)

апи = "/ пользователей /" + objectId + "/ thumbnailФото"

Надеюсь, это поможет!

private async Task<string> UploadByteArray(string api, byte[] byteArray) 
{ 
     // NOTE: This client uses ADAL v2, not ADAL v4 
     AuthenticationResult result = authContext.AcquireToken(Globals.aadGraphResourceId, credential); 
     HttpClient http = new HttpClient(); 
     string url = Globals.aadGraphEndpoint + tenant + api + "?" + Globals.aadGraphVersion; 

     HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Put, url); 
     request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);    
     request.Content = new System.Net.Http.ByteArrayContent(byteArray); 
     request.Content.Headers.Add("Content-Type", "application/octet-stream"); 
     HttpResponseMessage response = await http.SendAsync(request); 

     if (!response.IsSuccessStatusCode) 
     { 
      string error = await response.Content.ReadAsStringAsync(); 
      object formatted = JsonConvert.DeserializeObject(error); 
      throw new WebException("Error Calling the Graph API: \n" + JsonConvert.SerializeObject(formatted, Formatting.Indented)); 
     } 

     return await response.Content.ReadAsStringAsync(); 
    }