У меня есть все разрешения, например User.ReadWrite.All
, Directory.ReadWrite.All
, и этот тип разрешения — Application
.
Я думаю, что в этом случае возникла проблема с разрешением. Я хочу создать нового пользователя, используя этот код С#.
и я получаю эту ошибку, когда пытаюсь создать нового пользователя: the expression cannot be evaluated. A common cause of this error is attempting to pass a lambda into a delegate.
public async Task createNewUser()
{
try
{
var requestBody = new User
{
AccountEnabled = true,
City = "Surat",
Country = "India",
Department = "IT",
DisplayName = "Test User Unknown",
GivenName = "Unknown",
JobTitle = "SharePoint Developer",
MailNickname = "UnknownT",
PasswordPolicies = "DisablePasswordExpiration",
PasswordProfile = new PasswordProfile
{
Password = "0296db04-e2c3-cbec-993b-663e59e50f1c",
ForceChangePasswordNextSignIn = false,
},
OfficeLocation = "131/1105",
PostalCode = "395010",
PreferredLanguage = "en-US",
State = "Gujarat",
StreetAddress = "9256 Towne Center Dr., Suite 400",
Surname = "Test",
MobilePhone = "+91 1324567891",
UsageLocation = "India",
UserPrincipalName = "[email protected]",
};
var result = await GraphClient.Users.PostAsync(requestBody);
Console.WriteLine("User Created Successfully.");
}
catch (ServiceException ex)
{
Console.WriteLine($"Error getting user details: {ex.Message}");
}
}```
@Rukmini, я использую предыдущий код вопроса, ссылка на этот вопрос: [stackoverflow.com/questions/78304277/…
Какую ошибку вы получаете?
Вы ловите неправильное исключение. Попробуйте перехватить Exception вместо ServiceException. Исключение, исходящее от службы Graph, не обрабатывается должным образом. Вы должны увидеть, что не так с вашим запросом. По крайней мере UsageLocation должен быть двухбуквенным кодом, например IN.
Чтобы создать пользователя, обязательно предоставьте приложению User.ReadWrite.All
разрешение tpye API:
Чтобы создать пользователя с предоставленным вами телом запроса, используйте приведенный ниже код:
UsageLocation должно быть IN, а не как Индия.
using System;
using System.Threading.Tasks;
using Microsoft.Graph;
using Azure.Identity;
using Microsoft.Graph.Models.ODataErrors;
using Microsoft.Graph.Models;
namespace UserProperties
{
public class GraphHandler
{
public GraphServiceClient GraphClient { get; set; }
public GraphHandler(string tenantId, string clientId, string clientSecret)
{
GraphClient = CreateGraphClient(tenantId, clientId, clientSecret);
}
public GraphServiceClient CreateGraphClient(string tenantId, string clientId, string clientSecret)
{
var options = new TokenCredentialOptions
{
AuthorityHost = Azure.Identity.AzureAuthorityHosts.AzurePublicCloud
};
var clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret, options);
var scopes = new[] { "https://graph.microsoft.com/.default" };
return new GraphServiceClient(clientSecretCredential, scopes);
}
public async Task<bool> CreateUser(User user)
{
try
{
await GraphClient.Users.PostAsync(user);
Console.WriteLine("User created successfully.");
return true;
}
catch (ODataError odataError)
{
Console.WriteLine($"OData error details:");
Console.WriteLine($"Code: {odataError.Error?.Code}");
Console.WriteLine($"Message: {odataError.Error?.Message}");
throw;
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
return false;
}
}
}
class Program
{
static async Task Main(string[] args)
{
try
{
var tenantId = "TenantID";
var clientId = "ClientID";
var clientSecret = "ClientSecret";
var handler = new GraphHandler(tenantId, clientId, clientSecret);
var requestBody = new User
{
AccountEnabled = true,
City = "Surat",
Country = "India",
Department = "IT",
DisplayName = "Test User Unknown",
GivenName = "Unknown",
JobTitle = "SharePoint Developer",
MailNickname = "UnknownT",
PasswordPolicies = "DisablePasswordExpiration",
PasswordProfile = new PasswordProfile
{
Password = "***",
ForceChangePasswordNextSignIn = false,
},
OfficeLocation = "131/1105",
PostalCode = "395010",
PreferredLanguage = "en-US",
State = "Gujarat",
StreetAddress = "9256 Towne Center Dr., Suite 400",
Surname = "Test",
MobilePhone = "+91 1324567891",
UsageLocation = "IN",
UserPrincipalName = "[email protected]",
};
await handler.CreateUser(requestBody);
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
}
}
Пользователь успешно создан со всеми свойствами:
Я изменил код для печати ODataErrors
, чтобы можно было легко выявить ошибку.
Можете ли вы дать полный код? Вы используете ClientSecretCredential?