加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何在ASP.NET MVC中创建webhook?

发布时间:2020-12-15 08:45:45 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个简单的webhook来接收来自Nexmo SMS服务的送货回执.他们网站上唯一的文件就是这个. 在帐户设置过程中,系统会要求您向Nexmo提供一个用于送达回执的回拨网址,我们将为您的每个短信提交发送送达回执.这将确认您的消息是否已到达收件人的手机.
我正在尝试创建一个简单的webhook来接收来自Nexmo SMS服务的送货回执.他们网站上唯一的文件就是这个.

在帐户设置过程中,系统会要求您向Nexmo提供一个用于送达回执的回拨网址,我们将为您的每个短信提交发送送达回执.这将确认您的消息是否已到达收件人的手机.请求参数通过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直接调用函数返回视图
所以我在方法签名上插入了一个断点,但是只有从它中删除[HttpPost]才会被调用.我应该尝试的任何后续步骤?

解决方法

首先,您必须删除[HttpPost]位,因为它清楚地表明“参数是通过GET发送的”.

然后你还应该删除返回HttpStatusCodeResult(200),因为如果没有错误发生,它将返回200 OK状态代码.

然后,您应该只是从查询字符串或使用模型绑定读取值.这是一个示例:

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 />");
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读