我意识到Microsoft Graph .Net SDK正在使用HttpClient类.
https://github.com/microsoftgraph/msgraph-sdk-dotnet/blob/dev/src/Microsoft.Graph.Core/Requests/HttpProvider.cs
Run Code Online (Sandbox Code Playgroud)
Microsoft自己的文档建议HttpClient尽可能多地重用实例,而不是每个请求启动一个新实例,这可能会导致SocketException最终耗尽连接池.
是否有类似的建议,GraphServiceClient尽可能多地重用?实例化GraphServiceClient每个请求有什么特别的问题吗?
我正在使用 MS Graph 客户端,但在预览共享项目时遇到了麻烦。
ItemPreviewInfo preview = await graphClient.Me.Drive.Items[id].Preview().Request().PostAsync();
Run Code Online (Sandbox Code Playgroud)
给出不存在此类文件的错误,因为它不在我的驱动器中,所以很明显。我知道我可能需要访问共享文件夹,但“raphClient.Me.Drive.SharedWithMe...”没有给出任何项目 ID 规范。
任何帮助,将不胜感激。先感谢您。
这是我到目前为止所拥有的,但我似乎无法找到 .filter(s),是否以其他方式完成?
IGroupCollectionRequest request = graphServiceClient.groups().buildRequest();
IGroupCollectionPage page = request.get();
IGroupCollectionRequestBuilder builder = page.getNextPage();
while (builder != null) {
request = builder.buildRequest();
page = request.get();
builder = page.getNextPage();
}
Run Code Online (Sandbox Code Playgroud) java azure-active-directory microsoft-graph-sdks microsoft-graph-api
我正在尝试使用 Microsoft Graph SDK 来查询 calendarView 端点。我可以使用常规进行此查询,HttpClient但为了方便起见,我希望通过 SDK 执行此操作。我将尝试使用查询参数命中的端点如下所示:
GET /v1.0/me/calendar/calendarView?startDateTime=2019-01-01T00:00:00.0000000&endDateTime=2019-03-01T00:00:00.0000000
我试图通过这种方式通过 Graph SDK 进行调用:
var graphClient = new GraphServiceClient(new PreAuthorizedBearerTokenAuthenticationProvider(accessToken));
var rooms = await graphClient.Me.Events.Request().Filter("start/dateTime eq '2019-01-08T20:00:00.0000000' and end/dateTime eq '2019-01-08T20:00:00.0000000'").GetAsync();
Run Code Online (Sandbox Code Playgroud)
我为此收到了 200 分,但我的回复中没有任何值。如果我删除结束/日期时间部分,我将获得开始/日期时间日的值。似乎过滤器仅适用于特定情况而不适用于范围。有没有人有在范围内过滤的任何提示?
我正在尝试使用在我的 ASP.NET Core 应用程序中经常运行的后台任务(守护进程)在线上传和下载我的共享点中的文件。因为它是后台任务,所以不使用用户身份。相反,我尝试遵循此文档,使用https://graph.microsoft.com/.default范围获取访问令牌,以及让我的企业应用程序在 azure 上具有管理员已授予的特定权限。 
我可以使用我的应用程序的客户端 ID 和机密获取访问令牌。但是,当我尝试在 sharepoint 上的特定站点上请求驱动器时,它只是停顿,提示我它无法到达路径。当我使用我的用户凭据时,我可以完全正常地到达相同的路径。
我想我可能遗漏了一个步骤或一些与管理相关的任务。下面的代码片段显示我可以获得访问令牌,但在获取驱动器时停止。
var client = new ConfidentialClientApplication(id, uri, cred, null, new SessionTokenCache());
var authResult = await client.AcquireTokenForClientAsync(new[] {"https://graph.microsoft.com/.default"});
var token = authResult.AccessToken; // get token successfully
var graphServiceClient = new GraphServiceClient(new DelegateAuthenticationProvider(async request => {request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token)}));
// stalls below
var drives = await graphServiceClient.Sites[<sharepoint_host>].SiteWithPath(<known_path>).Drives.Request().GetAsync();
Run Code Online (Sandbox Code Playgroud)
在 ASP.NET Core 2 应用中使用 Microsoft Graph SDK。
c# azure azure-active-directory microsoft-graph-sdks microsoft-graph-api
我正在尝试更改 Azure AD 用户密码。
用户已经使用隐式流和库在SPA应用程序中进行了身份验证。adal
打电话时:
return await graphClient.Me.Request().UpdateAsync(new User
{
PasswordProfile = new PasswordProfile
{
Password = userPasswordModel.NewPassword,
ForceChangePasswordNextSignIn = false
},
});
Run Code Online (Sandbox Code Playgroud)
我收到此异常:
{"代码:Request_ResourceNotFound\r\n消息:资源“35239a3d-67e3-4560-920a-2e9ce027aeab”不存在或其查询的引用属性对象之一不存在。\r\n\r\n内部错误\r\ n"}
调试我得到的访问令牌,Microsoft Client SDK我看到这个GUID指的是oid和sub属性。见下文:
这是我用来获取令牌的代码:
IConfidentialClientApplication clientApp =
ConfidentialClientApplicationBuilder.Create(Startup.clientId)
.WithAuthority(string.Format(AuthorityFormat, Startup.tenant))
.WithRedirectUri(Startup.redirectUri)
.WithClientSecret(Startup.clientSecret)
.Build();
var authResult = await clientApp.AcquireTokenForClient(new[] { MSGraphScope }).ExecuteAsync();
return authResult.AccessToken;
Run Code Online (Sandbox Code Playgroud)
我在SPA应用程序中使用隐式流。在这样做时,我看到我的用户已通过身份验证并且所有声明都存在。ClaimsPrincipal.Current
我在 GitHub 和 Microsoft Docs 上阅读了很多文档,但我仍然不清楚如何实现这一点。顺便说一下,我正在使用这些 Microsoft Graph 包:
<package id="Microsoft.Graph" …Run Code Online (Sandbox Code Playgroud) authentication change-password access-token microsoft-graph-sdks microsoft-graph-api
我在网上的 sharepoint 中有一个列表。在这个列表中,我有一个 person 字段。
当我调用 API 端点以获取列表中的所有项目时,我会得到人员字段的 LookupId 值。
我试图通过使用 lookupid 的值来获取用户,但它不起作用,因为无法识别 id。
lookupid 是一个 int(例如:21)而不是一个 guid。
人员字段的配置或我对 Microsoft Graph API 的调用中是否缺少某些内容?
api sharepoint sharepoint-online microsoft-graph-sdks microsoft-graph-api
我正在使用 Microsoft Graph 从特定帐户的收件箱获取信息。该帐户有多个电子邮件别名。但是,即使在我$select查询该InternetMessageHeaders属性后,它也不包含电子邮件发送到的别名。
我发现,如果我还使用 选择并扩展查询singleValueExtendedProperties,我会得到我需要的内容,但现在我丢失了 中存在的一些标头InternetMessageHeaders。它还以一大堆文本的形式返回,看起来不太直接而难以解析。如果我能以某种方式将这个文本块解析为键:值映射,我可以合并这两个值并收工,但我不知道这是否可能。我希望它可以用multiValueExtendedProperties,但我不认为这是它的预期用途。
我正在使用 Microsoft Graph 的 SDK for .NET(当前使用 4.0.0),这是我迄今为止获取所有电子邮件的方法:
public async Task<List<Message>> PollEmails() {
var completeList = new List<Message>();
var messagesRequest = await graphClient.
Users[GraphOptions.AccountId] // Email account ID
.Messages // All Emails
.Request() // Create request w/ authorization & headers needed
.Select("internetMessageHeaders,singleValueExtendedProperties") // Additionally, select the email's headers
.Expand("singleValueExtendedProperties($filter=id eq 'String 0x007D')") // Without this filter, we cannot tell which email alias was …Run Code Online (Sandbox Code Playgroud) c# microsoft-graph-sdks microsoft-graph-mail .net-5 microsoft-graph-api
我有以下附件列表要通过邮件发送
要发送小于 4 MB(1MBPDF, 210KBPDF) 的总文件大小,我可以使用这种方法,要发送大文件 (4MBPDF),我正在使用此处提供的解决方案
但是,当我尝试使用大文件方法(示例代码)将三个文件(1MBPDF、210KBPDF、4MBPDF)一起发送时,出现以下错误...
com.microsoft.graph.http.GraphServiceException:错误代码:ErrorAttachmentSizeShouldNotBeLessThanMinimumSize 错误消息:附件大小必须大于最小大小。
POST https://graph.microsoft.com/v1.0/me/messages/AAMkAGNhNWJlNjdkLWNkZTUtNDE1Yy1hYzkxLTkyOWI1M2U3NGQzOABGAAAAAAASIVxVSsS8RI-T3F73mdJZBwANqxyKMlQbSqZO439E21_mAAAAAAEPAAANqxyKMlQbSqZO439E21_mAAAVRY2dAAA=/attachments/microsoft.graph.createUploadSession SdkVersion:图表的Java / V2.3.2授权:[PII_REDACTED] { “attachmentItem”: {“附件类型”:“文件”,“内容[...]
400:错误请求 [...]
如果我在实施该方法时犯了任何错误,请告诉我,或者建议我发送多个大小混合的附件的任何解决方法。
谢谢
microsoft-graph-sdks microsoft-graph-mail microsoft-graph-api
我的第一个 Microsoft Graph 应用程序旨在下载服务邮箱的电子邮件附件,使用了DeviceCodeCredential身份验证类,如以下代码所示:
var credentials = new DeviceCodeCredential(
(info, cancel) => { Console.WriteLine(info.Message); return Task.FromResult(0); },
"12345678-1234-1234-1234-12345678" /*TenantId*/,
"99999999-9999-9999-9999-999999999999" /*ClientID*/
);
Run Code Online (Sandbox Code Playgroud)
我们向建造者提供了凭证GraphServiceClient;这工作得很好,也就是说我们可以枚举邮箱中的项目并下载附件(不包括这些操作的代码,因为它与问题无关)。
var graphServiceClient = new GraphServiceClient(
credentials,
new string [] {"Mail.Read", "Mail.ReadBasic", "Mail.ReadWrite"});
Run Code Online (Sandbox Code Playgroud)
然后我们切换到客户端秘密身份验证;我们为该应用程序生成了一个客户端密钥,并将凭证对象更改为ClentSecretCredential使用以下代码的对象:
var credentials = new ClientSecretCredential("12345678-1234-1234-1234-12345678" /*TenantId*/,
"99999999-9999-9999-9999-999999999999" /*ClientID*/,
"SOME8SECRET123GENERATEDBYAZURE" /*Client Secret*/);
Run Code Online (Sandbox Code Playgroud)
现在,当我们调用同一个GraphServiceClient构造函数时,我们会得到异常:
Azure.Identity.AuthenticationFailedException:ClientSecretCredential 身份验证失败:AADSTS1002012:为范围 Mail.Read Mail.ReadBasic Mail.ReadWrite 提供的值无效。客户端凭据流必须具有一个范围值,其后缀为 /.default 后缀为资源标识符(应用程序 ID URI)。
似乎需要进行更多更改才能从身份验证模式切换到另一个身份验证模式。但到底是什么?
嘿伙计们,我正在尝试获取租户中所有房间的列表,但我收到一个错误,我看不到解决方案。我的图形服务客户端似乎是正确的,因为我可以毫无问题地获取所有用户的列表,但获取所有房间失败并出现未知错误。
我想要复制的内容:https://learn.microsoft.com/en-us/graph/api/place-list ?view=graph-rest-1.0&tabs=csharp#request
创建图形客户端并尝试从地方获取房间列表
public GraphServiceClient CreateGraphClient()
{
var scopes = new[] { "https://graph.microsoft.com/.default" };
var options = new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
// https://learn.microsoft.com/dotnet/api/azure.identity.clientsecretcredential
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret, options);
return new GraphServiceClient(clientSecretCredential, scopes);
}
public async Task<List<string>> GetRoomsAsync()
{
var rooms = await graphClient.Places.Request().GetAsync();
var roomsList = new List<string>();
foreach (var room in rooms)
{
Console.WriteLine(room.DisplayName);
roomsList.Add(room.DisplayName);
}
return roomsList;
}
Run Code Online (Sandbox Code Playgroud)
当试图获取用户时,同样的事情也会发生。
public async Task<List<string>> GetUsersAsync()
{
var users = await graphClient.Users.Request().GetAsync(); …Run Code Online (Sandbox Code Playgroud)