msgraph:如何使用 GraphServiceClient 创建批量订阅请求?

时间:2021-03-24 20:38:17

标签: c# asp.net microsoft-graph-api

我正在尝试创建一个批处理请求,该请求将在单个请求中创建多个图形通知订阅。

我一直在阅读这篇文章: https://docs.microsoft.com/en-us/graph/sdks/batch-requests?tabs=csharp

问题

我收到以下错误消息,但我不知道如何解决:

(local variable) Task<Subscription> userRequest
Argument 1: cannot convert from 'System.Threading.Tasks.Task<Microsoft.Graph.Subscription>' to 'Microsoft.Graph.BatchRequestStep'

代码

        var batchRequestContent = new BatchRequestContent();
        GraphServiceClient graphClient = await GenerateGraphAuthToken(this.amParms);

        foreach (string userId in this.UserstoSubscribe)
        {
                var subscription = new Subscription
                    {
                        ChangeType = "updated",
                        NotificationUrl= notificationURL,
                        Resource = $"users/{userId}/drive/root",
                        ExpirationDateTime = DateTimeOffset.Parse(subscriptionDate),
                        ClientState = "secretClientValue",
                        LatestSupportedTlsVersion = "v1_2"
                    };
                    var userRequest =  graphClient.Subscriptions
                        .Request()
                        .AddAsync(subscription);
                    var userRequestId = batchRequestContent.AddBatchRequestStep(userRequest);
        }
       var returnedResponse = await graphClient.Batch.Request().PostAsync(batchRequestContent);

任何提示将不胜感激。对不起。我刚接触 .NET 和 MS Graph。

1 个答案:

答案 0 :(得分:0)

AddBatchRequestStep 方法需要 BatchRequestStepIBaseRequestHttpRequestMessage 作为参数。 在您的情况下,您有一个 POST 请求,因此您必须获取 HttpRequestMessage 并转换为 POST

var subscription = new Subscription
{
    ChangeType = "updated",
    NotificationUrl= notificationURL,
    Resource = $"users/{userId}/drive/root",
    ExpirationDateTime = DateTimeOffset.Parse(subscriptionDate),
    ClientState = "secretClientValue",
    LatestSupportedTlsVersion = "v1_2"
};
// create a json content from the subscription
var jsonSubscription = graphClient.HttpProvider.Serializer.SerializeAsJsonContent(subscription);

// create a HttpRequestMessage, specify the method and add the json content
var userRequest = graphClient.Subscriptions.Request().GetHttpRequestMessage();
userRequest.Method = HttpMethod.Post;
userRequest.Content = jsonSubscription;

// add userRequest to a batch request content
var userRequestId = batchRequestContent.AddBatchRequestStep(userRequest);