【问题标题】:Processing Post Request from Slack处理来自 Slack 的发布请求
【发布时间】:2017-09-26 04:40:04
【问题描述】:

我已经设置了一个 asp.net MVC Web 应用程序来捕获发布请求。我设置了断点以查看正在通过的信息。单击交互式按钮时,我的断点被命中,但对象没有详细信息。当我将鼠标悬停在 value 上时,它只会显示 {Object}。当我使用 Postman 并发送原始 JSON 正文时,它会显示 JSON。请问我应该如何处理发送的 slack 对象?

public void Post(object value)
{
    // breakpoint here
}

【问题讨论】:

  • 请提供读取POST请求并解码JSON的实际代码,这只是一个空函数......
  • @ErikKalkoken 也许我措辞不佳,但我正在寻找如何解析对象。它在我的最后没有显示为 JSON。有没有可以将对象投射到的类?
  • 请看我的扩展答案。

标签: c# slack slack-api


【解决方案1】:

对于交互式消息,Slack 发送一个标准的 POST 请求,其中包含一个名为 payload 的表单数据编码参数。此参数包含实际请求的数据,为 JSON 字符串。

您可以通过 Postman 使用以下参数进行模拟:

  • 请求类型:POST
  • 标题:Content-Type: application/x-www-form-urlencoded
  • 正文:form-datakey=payloadvalue = JSON 字符串。

所以正文并不像您假设的那样完全是 JSON,而是包含一个带有 JSON 编码字符串的表单参数。如果您相应地更改您的应用程序,它将起作用。

在 c# 中,您可以使用Request["payload"] 访问payload 参数的内容(请参阅this answer 或详细信息)。

那么你当然还需要将 JSON 字符串解码成一个对象。一个简单的方法是使用JavaScriptSerializer.Deserialize。 (有关详细信息和替代方法,请参阅this answer)。

【讨论】:

  • 嗨,Erik,您创建了哪种类型的应用程序来接受这些发布请求? asp.net mvc 也是?我试过了,我看到了这个imgur.com/a/ri6Wg
  • 如果该方法不起作用,请查看有关如何使用 c# 检索 POST 请求的替代方法的链接答案
  • 嘿,你有没有在 .net core 中完成过这个?使用框架 4.6 它可以很好地与 Request["payload"] 一起使用,但不是 .net core 的解决方案。
  • 没有,但是您检查过我发布的链接中的答案了吗?
  • 通过在 Postman 中使用所需的参数,我能够获取 json 值,但根据事件 API 文档,他们将发送 Content-Type:application/json。那不会痛吗?
猜你喜欢
  • 1970-01-01
  • 2020-09-16
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 2018-07-31
相关资源
最近更新 更多