需要一个Smartsheet回调控制器方法的C#WebApi示例

时间:2018-05-22 17:06:19

标签: c# smartsheet-api smartsheet-c#-sdk-v2 smartsheet-api-2.0

我正在开发一个原型,使用Smartsheets webhooks在发生更改时通知ASP.Net/WebApi端点。虽然我理解这些概念,但我无法找到Smartsheets将传递给回调端点的结构的具体示例。

我怀疑它是一个Json字符串,我应该能够在控制器方法中定义一个字符串参数来接受它:

public HttpStatusCodeResult Put([FromBody]string payload)
{ ... } 

但我不清楚应该命名的参数是什么(或者即使它的名称是什么也很重要)。

有人可以提供:

  • Smartsheets webhook回调控制器方法的一个示例
  • 澄清有效负载参数类型和名称应该是什么

2 个答案:

答案 0 :(得分:1)

我终于想到了这一个。我使用Json响应结构在C#中创建了一个类似的类,然后将该结构用作传入参数类型:

  public class Payload
    {
        public int PayloadId { get; set; }
        public Guid Nonce { get; set; }
        public string Timestamp { get; set; }
        public string WebhookId { get; set; }
        public string Scope { get; set; }

        public string ScopeObjectId { get; set; }
        public virtual List<PayloadEvent> Events { get; set; }
    }

    public class PayloadEvent
    {
        public int PayloadEventId { get; set; }
        public string ObjectType { get; set; }
        public string EventType { get; set; }

        [JsonProperty(PropertyName = "Id")]
        public string EventId { get; set; }

        public string UserId { get; set; }

        public string Timestamp { get; set; }
    }

控制器代码:

[HttpPost]
public void Post([FromBody] Payload value)
{
    ...
}

也可以只使用 dynamic 作为参数类型,但是没有利用下游的任何编译器检查,所以我通过定义类来选择更多结构。

答案 1 :(得分:0)

我可以帮助解决Webhook回调的结构问题。在您{h} createverify之后,活动将按以下格式发布到您的callback终端:

{
  "nonce": "4b2ed20d-6f00-4b0c-8fac-082182aa9aac",
  "timestamp": "2015-10-27T17:04:23.795+0000",
  "webhookId": 4503604829677444,
  "scope": "sheet",
  "scopeObjectId": 4509506114742148,
  "events": [
    {
      "objectType": "sheet",
      "eventType": "updated",
      "id": 4509506114742148,
      "userId": 9007194052434043,
      "timestamp": "2015-10-27T17:03:15.000+0000"
    },
    {
      "objectType": "row",
      "eventType": "created",
      "id": 7129509179746180,
      "userId": 9007194052434043,
      "timestamp": "2015-10-27T17:03:15.000+0000"
    }
  ]
}

events数组将位于POST的主体中。