如何通过Webhooks在Azure Function中获取SharePoint列表附件
我们有一个包含大型PDF附件的SharePoint列表,已配置Azure Webhook以在列表发生变更时通知Azure Function App,希望能够检查并解析PDF附件。
我开发经验尚浅,已参考微软官方示例完成代码实现,测试中Azure Function已成功触发事件:
Monitor Invocation:
目前实现的代码基本与示例一致,主要功能为输出日志信息,但我找不到使用SharePoint列表获取附件的详细实现场景示例。
是否可以通过以下代码读取请求体获取附件数据?
var content = await new StreamReader(req.Body).ReadToEndAsync();
完整代码上下文:
#r "Newtonsoft.Json" using System.Net; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; using Newtonsoft.Json; public static async Task<IActionResult> Run(HttpRequest req, ICollector<string> outputQueueItem, ILogger log) { log.LogInformation($"Webhook was triggered!"); // Grab the validationToken URL parameter string validationToken = req.Query["validationtoken"]; // If a validation token is present, we need to respond within 5 seconds by // returning the given validation token. This only happens when a new // webhook is being added if (validationToken != null) { log.LogInformation($"Validation token {validationToken} received"); return (ActionResult)new OkObjectResult(validationToken); } log.LogInformation($"SharePoint triggered our webhook...great :-)"); //Is the attachment available via the content variable? var content = await new StreamReader(req.Body).ReadToEndAsync(); log.LogInformation($"Received following payload: {content}"); var notifications = JsonConvert.DeserializeObject<ResponseModel<NotificationModel>>(content).Value; log.LogInformation($"Found {notifications.Count} notifications"); if (notifications.Count > 0) { log.LogInformation($"Processing notifications..."); foreach(var notification in notifications) { // add message to the queue string message = JsonConvert.SerializeObject(notification); log.LogInformation($"Before adding a message to the queue. Message content: {message}"); outputQueueItem.Add(message); log.LogInformation($"Message added :-)"); } } // if we get here we assume the request was well received return (ActionResult)new OkObjectResult($"Added to queue"); } // supporting classes public class ResponseModel<T> { [JsonProperty(PropertyName = "value")] public List<T> Value { get; set; } } public class NotificationModel { [JsonProperty(PropertyName = "subscriptionId")] public string SubscriptionId { get; set; } [JsonProperty(PropertyName = "clientState")] public string ClientState { get; set; } [JsonProperty(PropertyName = "expirationDateTime")] public DateTime ExpirationDateTime { get; set; } [JsonProperty(PropertyName = "resource")] public string Resource { get; set; } [JsonProperty(PropertyName = "tenantId")] public string TenantId { get; set; } [JsonProperty(PropertyName = "siteUrl")] public string SiteUrl { get; set; } [JsonProperty(PropertyName = "webId")] public string WebId { get; set; } } public class SubscriptionModel { [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public string Id { get; set; } [JsonProperty(PropertyName = "clientState", NullValueHandling = NullValueHandling.Ignore)] public string ClientState { get; set; } [JsonProperty(PropertyName = "expirationDateTime")] public DateTime ExpirationDateTime { get; set; } [JsonProperty(PropertyName = "notificationUrl")] public string NotificationUrl {get;set;} [JsonProperty(PropertyName = "resource", NullValueHandling = NullValueHandling.Ignore)] public string Resource { get; set; } }
我尝试对Azure门户中运行的代码进行远程调试,以查看HttpRequest和StreamReader对象,但遇到诸多问题未能成功。
感谢您的帮助。
内容的提问来源于stack exchange,提问作者Tikhon
相关产品推荐
相关产品推荐

