如何在ASP.Net MVC中初始化webhook接收器

时间:2017-10-25 23:28:34

标签: asp.net-mvc webhooks asp.net-routing

我按照本指南here在ASP.Net MVC中安装和使用webhook,但看起来本指南适用于wep api类型的项目。我使用MVC类型项目,并且没有Register方法,与API项目不同。在MVC中,我们有一个RegisterRoutes方法。那么如何在MVC中注册我的webhook?

使用Register和config的API项目,我的ASP.Net MVC网站没有这个。

enter image description here

MVC使用RegisterRoutes

enter image description here

更新 在这里我添加了一个web api控制器,我在下面发布的代码是web api控制器中的内容。我包括了webhooks的nuget包,global.asax.cs和register方法中的注册。但是我仍然无法访问代码' ExecuteAsync'没有断点被击中

public class StripeWebHookHandler : WebHookHandler
{
    // ngrok http -host-header="localhost:[port]" [port]
    // http(s)://<yourhost>/api/webhooks/incoming/stripe/   strip receiver

    public StripeWebHookHandler()
    {
        this.Receiver = StripeWebHookReceiver.ReceiverName;
    }

    public override Task ExecuteAsync(string generator, WebHookHandlerContext context)
    {
        // For more information about Stripe WebHook payloads, please see 
        // 'https://stripe.com/docs/webhooks'
        StripeEvent entry = context.GetDataOrDefault<StripeEvent>();

        // We can trace to see what is going on.
        Trace.WriteLine(entry.ToString());

        // Switch over the event types if you want to
        switch (entry.EventType)
        {
            default:
                // Information can be returned in a plain text response
                context.Response = context.Request.CreateResponse();
                context.Response.Content = new StringContent(string.Format("Hello {0} event!", entry.EventType));
                break;
        }

        return Task.FromResult(true);
    }
}

1 个答案:

答案 0 :(得分:1)

您可以在MVC项目中混合使用web api控制器。添加web api控制器时,App_Start中将有一个WebApiConfig.cs文件,您可以在其中定义web api的路由。在这里,您可以在为项目添加必要的nuget包之后调用InitializeReceiveStripeWebHooks方法。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        // Load receivers
        config.InitializeReceiveStripeWebHooks();
    }
}

创建新项目时,Visual studio会为您提供不同的项目模板。您可以选择包含MVC和Web Api支持的WebApi。但是如果你的项目是使用MVC模板创建的,那么默认情况下它不会支持web api。在这种情况下,您可以按照以下步骤手动添加它。

第1步

在App_Start文件夹中创建一个名为WebApiConfig.cs的新类。在该课程中有以下内容

using System.Web.Http;
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

第2步

现在转到global.asax并更新Application_Start事件,以便在我们新创建的Register类中调用WebApiConfig方法。

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);  // This is the new line

    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

现在您可以右键单击项目并添加新的WebApiController类,web api现在可以正常工作。