2016-12-15 6 views
2

Я пытаюсь выполнить операцию CRUD для Azure B2C через приложение MVC. Следующее приложение работает для получения пользовательских данных, то есть GET. Но метод POST для создания нового пользователя не работает. POST Способ дает ответ с Status Code 400, Причина Phrase:Bad Request. Я добавил эти два метода для достижения функциональности CR в проекте в GitHub: Microsoft Graph SDK ASPNET ConnectОШИБКА: Azure B2C Создайте пользователя методом post из веб-приложения

public async Task<string> UpdateUserDetails(string accessToken) 
    { 
     string jsondata = File.ReadAllText("C:\\usertemplate-email.json"); 

     string endpoint = "https://graph.microsoft.com/v1.0/users"; 
     using (var client = new HttpClient()) 
     { 
      using (var request = new HttpRequestMessage(HttpMethod.Post, endpoint)) 
      { 
       request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 
       request.Content = new StringContent(JsonConvert.SerializeObject(jsondata), Encoding.UTF8, "application/json"); 
       //didn't received successStatusCode with or without searilizing jasondata 
       using (HttpResponseMessage response = await client.SendAsync(request)) 
       { 
        if (response.IsSuccessStatusCode) 
        { 
         //Status Code: 400, Reason Phrase:Bad Request 
         var json = JObject.Parse(await response.Content.ReadAsStringAsync()); 

        } 
        return response.ReasonPhrase; 
       } 
      } 
     } 

    } 

    public async Task<string> GetUserDetails(string accessToken) 
    { 

     // Get the current user. 
     // The app only needs the user's email address, so select the mail and userPrincipalName properties. 
     // If the mail property isn't defined, userPrincipalName should map to the email for all account types. 
     string endpoint = "https://graph.microsoft.com/v1.0/users/4b4442a8-bd02-4992-9c62-b1b31807428d"; 


     using (var client = new HttpClient()) 
     { 
      //if no queryParameter parameter is passed, all parameters will be selected 
      using (var request = new HttpRequestMessage(HttpMethod.Get, endpoint)) 
      { 
       request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
       request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 
       using (HttpResponseMessage response = await client.SendAsync(request)) 
       { 
        if (response.StatusCode == HttpStatusCode.OK) 
        { 
         var json = JObject.Parse(await response.Content.ReadAsStringAsync()); 
         //got the expected result at this point 
        } 
        return response.ReasonPhrase; 
       } 
      } 
     } 
    } 

включаемый файл в формате JSON:

{ 
"accountEnabled": true, 
"signInNames": [ 
    { 
     "type": "emailAddress", 
     "value": "[email protected]" 
    } 
], 
"creationType": "LocalAccount", 
"displayName": "Joe Consumer", 
"mailNickname": "joec", 
"passwordProfile": { 
    "password": "[email protected]!", 
    "forceChangePasswordNextLogin": false 
}, 
"passwordPolicies": "DisablePasswordExpiration", 


"city": "San Diego", 
"country": null, 
"facsimileTelephoneNumber": null, 
"givenName": "Joe", 
"mail": null, 
"mobile": null, 
"otherMails": [], 
"postalCode": "92130", 
"preferredLanguage": null, 
"state": "California", 
"streetAddress": null, 
"surname": "Consumer", 
"telephoneNumber": null 
} 

ответ

0

Наконец, я могу сделать это, выполнив параметры, как указано в microsoft graph api documentation. Данные json, которые я использовал: {"accountEnabled": true,
"displayName": "my, name",
"mailNickname": "emailname",
"userPrincipalName": "[email protected]",
"passwordProfile" : {
"forceChangePasswordNextSignIn": true,
"password": "[email protected]!"
} }

Не должно быть места в значении атрибута mailNickname. Функция CreateuserFunction будет:

public async Task<string> CreateUser(string accessToken) 
    { 
     string jsondata = File.ReadAllText(@"C:\\usertemplate-email.json"); 

     string endpoint = "https://graph.microsoft.com/v1.0/users"; 
     using (var client = new HttpClient()) 
     { 
      var method = new HttpMethod("POST"); 

      using (var request = new HttpRequestMessage(method, endpoint)) 
      { 
       request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 
       request.Content = new StringContent(jsondata.ToString(), Encoding.UTF8, "application/json"); 
       using (HttpResponseMessage response = await client.SendAsync(request)) 
       { 
        if (response.IsSuccessStatusCode) 
        { 
         //Status Code: 400, Reason Phrase:Bad Request 
         //On success, it gives Created 
         var json = JObject.Parse(await response.Content.ReadAsStringAsync()); 

        } 
        return response.ReasonPhrase; 
       } 
      } 
     } 
    } 
0

Это может быть потому, что вы используете API Microsoft Graph, а не Azure AD Graph API.

Насколько я знаю, API-интерфейс Microsoft Graph не работает с B2C.

Вы хотите использовать этот один: https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/users-operations

+0

Спасибо @gfyans. Я думаю, что это связано не с API-интерфейсом Microsoft Graph, поскольку я могу заставить его работать для методов GET и PATCH. Это может быть вызвано вложенным объектом во входные данные json, где сериализация вызывает ошибку формата. –

0

Пожалуйста, убедитесь, что учетная запись вы хотите добавить не выход на арендатора раньше.

JSON хорошо работает для меня, когда я впервые добавил аккаунт. И я могу воспроизвести эту проблему с ошибкой 400, когда я попытаюсь добавить ее снова. Вот подробное сообщение об ошибке: enter image description here

Мы можем использовать Fiddler для захвата запроса, чтобы увидеть сообщение об ошибке детали.

+0

Я пытаюсь сделать это с помощью microsoft graph api (graph.windows.com), а не windows.graph.net, поэтому данные json не работают. –

 Смежные вопросы

  • Нет связанных вопросов^_^