c# - 如何在 ASP.NET MVC 中创建 Webhook?

标签 c# asp.net-mvc callback http-post webhooks

我正在尝试创建一个简单的网络钩子(Hook)来接收来自 Nexmo SMS 服务的送达回执。他们网站上唯一的文档就是这个。

在帐户设置过程中,您将被要求向 Nexmo 提供一个用于送达回执的回调 URL,我们将向其发送您提交的每条 SMS 的送达回执。这将确认您的消息是否到达了收件人的手机。请求参数通过 GET(默认)发送到您的回调 URL,Nexmo 将期待响应 200 OK 响应,或者它将继续重试,直到送达回执过期(最多 72 小时)。

我一直在寻找执行此操作的方法,到目前为止,我从网上找到的一个示例中得到了这个方法,尽管我不确定这是否正确。无论如何,这是在 ASP.NET 和端口 6563 上运行的,所以这是我应该监听的端口吗?我下载了一个名为 ngrok 的应用程序,它应该将我的本地 Web 服务器暴露给互联网,所以我运行了该应用程序并指示它监听端口 6563,但没有成功。我一直在摆弄它,试图找到某种方式发布到这个功能。

[HttpPost]
public ActionResult CallbackURL()
{
    System.IO.StreamReader reader = new System.IO.StreamReader(HttpContext.Request.InputStream);
    string rawSendGridJSON = reader.ReadToEnd();
    return new HttpStatusCodeResult(200);
}

通常我可以通过访问http://localhost:6563/Home/Index/CallbackURL直接调用函数返回 View 所以我在方法签名上插入了一个断点,但只有当我从中删除 [HttpPost] 时它才会被调用。我应该尝试任何后续步骤吗?

最佳答案

首先,您必须删除 [HttpPost] 位,因为它明确指出“参数是通过 GET 发送的”。

然后您还应该删除返回的 HttpStatusCodeResult(200),因为如果没有发生错误,它无论如何都会返回 200 OK 状态代码。

那么您应该简单地从查询字符串或使用模型绑定(bind)中读取值。这是一个示例:

    public string CallbackURL()
    {
        string vals = "";

        // get all the sent data 
        foreach (String key in Request.QueryString.AllKeys)
            vals += key + ": " + Request.QueryString[key] + Environment.NewLine;

        // send all received data to email or use other logging mechanism
        // make sure you have the host correctly setup in web.config
        SmtpClient smptClient = new SmtpClient();
        MailMessage mailMessage = new MailMessage();
        mailMessage.To.Add("...@...com");
        mailMessage.From = new MailAddress("..@....com");
        mailMessage.Subject = "callback received";
        mailMessage.Body = "Received data: " + Environment.NewLine + vals;
        mailMessage.IsBodyHtml = false;
        smptClient.Send(mailMessage);

        // TODO: process data (save to database?)

        // disaplay the data (for degugging purposes only - to be removed)
        return vals.Replace(Environment.NewLine, "<br />");
    }

关于c# - 如何在 ASP.NET MVC 中创建 Webhook?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26417285/

相关文章:

asp.net-mvc - 填充导航属性的导航属性

c++ - 回调需要const函数,如何传递对象的实例成员

vue.js - 外部付款后使用 POST 重定向到前端 URL

asp.net-mvc - ASP.NET MVC DotNetOpenAuth 在身份验证后获取 ReturnURL?

c# - 解析字节数组时抛出什么异常? (C#)

c# - EF - 在运行时在 Firebird 和 Oracle 数据库之间切换

c# - 将嵌套实体投影到嵌套 View 模型中

c# - 如何忽略 MVC 路由中的所有特定文件扩展名

function - 如何用简单的英语解释回调?它们与从一个函数调用另一个函数有何不同?

c# - 在List对象的属性上具有条件的foreach循环