我正在尝试在我的Azure AD B2C目录中创建一个用户。通过在cmd中使用以下命令发布示例JSON文件,我已经成功创建了用户:
>B2C Create-User <Path to my JSON file>
我想做的是发布一些JSON字符串而不是JSON文件,并且命令行给了我以下错误:
Error Calling the Graph API:
{
"odata.error": {
"code": "Request_BadRequest",
"message": {
"lang": "en",
"value": "A value without a type name was found and no expected type is available. When the model is specified, each value in the payload must have a type which can be either specified in the payload, explicitly by the caller or implicitly inferred from the parent value."
},
"requestId": "965dba69-4488-4d24-88a4-989a6d06cd8d",
"date": "2019-03-19T12:55:27"
}
}
这就是我尝试发布JSON的方式:
private static void CreateUser(string[] args)
{
string json = new JavaScriptSerializer().Serialize(new
{
accountEnabled = true,
SignInName = new List<UserInformation.SignInName>()
{
new UserInformation.SignInName(){ type = "emailAddress", value = "safanmomin92@gmail.com" }
},
creationType = "LocalAccount",
displayName = "Safan Momin",
mailNickname = "Safan",
passwordProfile = new UserInformation.PasswordProfile
{
password = "Mazik@123", forceChangePasswordNextLogin = false
},
passwordPolicies = "DisablePasswordExpiration"
});
object formatted = JsonConvert.DeserializeObject(client.CreateUser(json).Result);
}
这是我的CreateUser方法:
public async Task<string> CreateUser(string json)
{
return await SendGraphPostRequest("/users", json);
}
这是我的SendGraphPostRequest方法:
private async Task<string> SendGraphPostRequest(string api, string json)
{
// 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;
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("POST " + url);
Console.WriteLine("Authorization: Bearer " + result.AccessToken.Substring(0, 80) + "...");
Console.WriteLine("Content-Type: application/json");
Console.WriteLine("");
Console.WriteLine("JSON: "+json);
Console.WriteLine("");
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
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));
}
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine((int)response.StatusCode + ": " + response.ReasonPhrase);
Console.WriteLine("");
return await response.Content.ReadAsStringAsync();
}
答案 0 :(得分:1)
我正在整理我的JSON字符串,并在那里发现错误。我在写SignInName
而不是signInNames
。