Microsoft Graph Batch 요청에서 실패한 요청 식별
11960 단어 batchmicrosoftgraph
GET/POST/DELETE
와 같은 다양한 유형의 요청이나 Users/Groups/Events
등과 같은 리소스를 포함할 수 있습니다.이는 유용하지만 요청 유형에 따라 일부 요청이 실패한 이유를 식별하기 어려울 수 있습니다.
예시 시나리오
예를 들어 그룹에서 사용자를 제거하도록 일괄 요청하는 경우 사용자가 그룹에 속하지 않으면 실패합니다. 그러나 오류 메시지는 제거하지 못한 사용자 ID에 대한 정보를 제공하지 않습니다.
요청이 실패했을 때 발생하는 오류입니다.
"error": {
"code": "Request_ResourceNotFound",
"message": "Resource 'be24f653-c890-454c-a465-0297c3de2fc2' does not exist or one of its queried reference-property objects are not present.",
"innerError": {
"date": "2022-10-03T04:06:29",
"request-id": "af2627a2-428d-4061-bb3a-00247e8589cc",
"client-request-id": "e03aab35-0657-c9e2-6703-c38debae955c"
}
}
이 경우 사용자 ID를 알기 위해서는 실제 요청 자체를 알아야 합니다.
배치의 고유 요청 ID
일괄 요청에
BatchRequestStep
목록을 추가해야 하며 각 BatchRequestStep
에는 RequestId
속성이 있습니다. 이 ID는 응답의 일부가 됩니다.샘플 코드
다음 샘플은 요청뿐만 아니라 응답을 확인하는 방법을 설명합니다. 코드를 단순화하기 위해 두 가지 요청만 추가했지만 더 추가할 수 있습니다. 고유한 요청 ID를 설정할 수 있으므로 여기에서
user id
를 사용했으며 콘솔에서 user id
로 표시하는 데 사용합니다.배치 응답의
Key
는 요청 ID에 해당합니다.using Microsoft.Graph;
using Microsoft.Identity.Client;
using System.Net;
using System.Net.Http.Headers;
string tenantId = "tenantId";
string clientId = "clientId";
string clientSecret = "clientSecret";
string baseUrl = "https://graph.microsoft.com/v1.0";
IConfidentialClientApplication app =
ConfidentialClientApplicationBuilder
.Create(clientId)
.WithClientSecret(clientSecret)
.WithAuthority(new Uri($"https://login.microsoftonline.com/{tenantId}"))
.Build();
string[] scopes = new[] { "https://graph.microsoft.com/.default" };
AuthenticationResult authenticationResult =
await app.AcquireTokenForClient(scopes).ExecuteAsync();
GraphServiceClient graphClient = new (
new DelegateAuthenticationProvider(r => {
r.Headers.Authorization =
new AuthenticationHeaderValue(
"bearer", authenticationResult.AccessToken);
return Task.FromResult(0);
}));
List<User> users = new();
BatchRequestContent batchRequestContent = new();
string groupId = "the groupId";
string memberId1 = "the memberId1";
batchRequestContent.AddBatchRequestStep(
new BatchRequestStep(
memberId1,
new HttpRequestMessage(
HttpMethod.Delete,
$"{baseUrl}/groups/{groupId}/members/{memberId1}/$ref")
)
);
string memberId2 = "the memberId2";
batchRequestContent.AddBatchRequestStep(
new BatchRequestStep(
memberId2,
new HttpRequestMessage(
HttpMethod.Delete,
$"{baseUrl}/groups/{groupId}/members/{memberId2}/$ref")
)
);
BatchResponseContent batchResponseContent =
await graphClient.Batch.Request().PostAsync(batchRequestContent);
foreach(KeyValuePair<string, HttpResponseMessage> response
in await batchResponseContent.GetResponsesAsync())
{
if(response.Value.StatusCode != HttpStatusCode.OK)
{
BatchRequestStep requestStep = batchRequestContent.BatchRequestSteps[response.Key];
Console.WriteLine($"StatusCode: {response.Value.StatusCode}");
Console.WriteLine($"Request URI: {requestStep.Request.RequestUri}");
Console.WriteLine($"Failed user: {requestStep.RequestId}");
}
}
요약
Batch는 Microsoft Graph에서 정말 유용한 기능이므로 최대한 활용해 보시기 바랍니다. 배치 요청 단위 테스트를 위해 다른 게시물이 있습니다.
Reference
이 문제에 관하여(Microsoft Graph Batch 요청에서 실패한 요청 식별), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kenakamu/identify-which-request-failed-in-microsoft-graph-batch-request-3a07텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)