Я пытаюсь перехватить событие «общий доступ к документам» в One Drive с помощью API подписки Graph.Я могу создать подписку в своем приложении Dotnet WebAPI.Ниже приведен мой код:
Microsoft.Graph.User user = funGetO365User("user1@mydomain.onmicrosoft.com");
//Notification URL = /notification/listen
Subscription subscription = new Subscription
{
Resource = "/"+ user.Id + "/drive/root",
ChangeType = "updated",
NotificationUrl =
ConfigurationManager.AppSettings["ida:NotificationUrl"],
ClientState = Guid.NewGuid().ToString(),
//ExpirationDateTime = DateTime.UtcNow + new TimeSpan(0, 0, 4230, 0) // current maximum timespan
ExpirationDateTime = DateTime.UtcNow + new TimeSpan(0, 0, 15, 0) // shorter duration useful for testing
};
string contentString = JsonConvert.SerializeObject(subscription,
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, subscriptionsEndpoint);
request.Content = new StringContent(contentString, System.Text.Encoding.UTF8, "application/json");
// Send the `POST subscriptions` request and parse the response.
GraphHttpClient graphHttpClient = new GraphHttpClient(accessToken);
HttpResponseMessage response = await graphHttpClient.SendAsync(request);
Мое приложение работает на локальном хосте, и я использую ngrok для передачи запроса на локальный хост.
Я получаю уведомление, когда создаю подписку:
[HttpPost]
public async Task<ActionResult> Listen()
{
// Validate the new subscription by sending the token back to Microsoft Graph.
// This response is required for each subscription.
if (Request.QueryString["validationToken"] != null)
{
var token = Request.QueryString["validationToken"];
return Content(token, "plain/text");
}
else
{
// My code- Never executed
}
}
Однако, если я внесу какие-либо изменения в один диск пользователя (редактировать документ, поделиться документом), я не получулюбое уведомление.
Есть идеи, что мне нужно сделать, чтобы получать только уведомления?