0

我需要“WinForm”应用程序在 viber 中进行通信。
 “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-链接

问题。
如何制作 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)
            {
                // .....
            }
        }

    }

}

在此处输入图像描述

7. "Postman". Click "SEND"; 在此处输入图像描述

8. The result, see the picture "- = RESULT = -"; 在此处输入图像描述

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

Update_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.

在此处输入图像描述

4

1 回答 1

3

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

所以,方法会变成

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

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

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

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

这是屏幕截图: 代码

试试这个,让我知道你是否还有问题。

于 2019-07-02T09:13:28.527 回答