如何制作“网络挂钩”?

时间:2019-07-02 06:22:17

标签: c# asp.net asp.net-webhooks

我需要“ WinForm”应用程序来进行通信。
“ Webhook”计划从viber接收数据(事件),然后该数据将在应用程序“ WinForm”中使用。

我做到了:

  1. 创建了项目“ ASP.NET Web应用程序(.NET Framework)”;
  2. 选择一个模板-“空” +“ MVC” +“ API”;
  3. 添加了控制器“控制器MVC 5-空”。控制器名称“ HookController”;
  4. 我运行应用程序“邮递员”;
  5. “邮递员”。我将请求设置为“ POST”;
  6. “邮递员”。我设置了链接http://localhost:44836/Hook;
  7. “邮递员”。点击“发送”;
  8. 结果,请参见图片“-= RESULT =-”;

如果我正确理解了理论,则在执行"Postman" action. I click "SEND"之后,应在ViberProcess (HttpContext context)控制器中执行HookController.cs方法,并且代码应在breakpoint处停止。
这没有发生。

文档Viber REST API-link

问题。
如何制作Webhook?

代码HookController.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

using System.Web;
using System.Web.Mvc;

//
using System.Runtime.Remoting.Contexts;

namespace WebAppl1.Controllers
{
    public class HookController : Controller
    {
        // GET: Hook
        //public ActionResult Index()
        //{
        //    return View();
        //}

         [HttpPost]
        // [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public void ViberProcess(HttpContext context)
        {
            try
            {
                Stream s = context.Request.InputStream;
                // Stream s = Context.Request.InputStream;
                // or  Stream s  =  HttpContext.Current.Request.InputStream;
                s.Position = 0;
                StreamReader reader = new StreamReader(s);
                string jsonText = reader.ReadToEnd();

                // Other code that converts json text to classes
            }
            catch (Exception e)
            {
                // .....
            }
        }

    }

}

enter image description here

7. "Postman". Click "SEND"; enter image description here

8. The result, see the picture "- = RESULT = -"; enter image description here

Server error in application '/'. Could not find this resource. Description: HTTP 404. The resource (or one of its dependencies) may have been deleted, received a different name, or may be temporarily unavailable. Review the following URL and verify that it is correct. Requested URL: / Hook Version Information: Microsoft .NET Framework Version 4.0.30319; ASP.NET version: 4.7.3062.0

更新_1
我使用链接http://localhost:44836/api/Hook
代码不止于breakpoint
结果:
{
"Message": "Could not find the HTTP resource corresponding to the request URI \" http://localhost:44836/api/Hook\ ".", "MessageDetail": "Could not find the type corresponding to the controller \" Hook \ " . " }

我使用链接http://localhost:44836/Hook/ViberProcess
代码不止于breakpoint
结果
Server error in application '/'. For this object, no parameterless constructors are defined. Description: An unhandled exception occurred during the execution of the current web request. Examine the stack trace for more information about this error and the code snippet that caused it. Exception Details: System.MissingMethodException: No parameter-less constructors are defined for this object. Source Error: An unhandled exception occurred during the execution of the current web request. Information on the origin and location of the exception can be obtained using the following exception stack trace.

enter image description here

1 个答案:

答案 0 :(得分:8)

只需在您的HttpContext context操作中删除ViberProcess

因此,方法将变为

public IActionResult ViberProcess()
{
    Stream s = HttpContext.Current.Request.InputStream;

    //... continue your code from here.
}

其背后的原因是,您提到HttpContext context作为ViberProcess的参数,但是在发送请求时,它将使用精确模式进行搜索。

因此,在您的请求中,您无法从任何地方传递HttpContext。因此,将永远找不到此请求。

这是屏幕截图: Code

尝试一下,让我知道您是否还有问题。