- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试为在 ASP.NET C# 中从 WordPress WooCommerce 发送的 Webhooks 创建一个 WebHookHandler。
我首先创建了一个 ASP.NET C# Azure API 应用 Web 应用程序项目并添加了相关引用(Microsoft.AspNet.WebHooks.Common、Microsoft.AspNet.WebHooks.Receivers、Microsoft.AspNet.WebHooks.Receivers.WordPress)。添加了WebHookConfig、WordPressWebHookHandler,并在GlobalAsax中注册了WebHookConfig。
然后我将该应用程序发布为 Azure 应用服务。
我的 WordPressWebHookHandler 仍然是示例的默认值,看起来像这样:
public class WordPressWebHookHandler : WebHookHandler
{
public override Task ExecuteAsync(string receiver, WebHookHandlerContext context)
{
// make sure we're only processing the intended type of hook
if("WordPress".Equals(receiver, System.StringComparison.CurrentCultureIgnoreCase))
{
// todo: replace this placeholder functionality with your own code
string action = context.Actions.First();
JObject incoming = context.GetDataOrDefault<JObject>();
}
return Task.FromResult(true);
}
}
在 WooCommerce 中测试用户创建 WebHook 时,我可以在日志中看到如下请求。
但不幸的是,调试时从未收到它,我看到以下错误。
我在想也许我需要一个自定义的 WebHook 而不是 WordPress 特定的 WebHook,因为这是一个 WooCommerce Webhook。或者它可能在路由中处理错误并最终在另一个 Controller 中。
非常感谢任何帮助。
最佳答案
期望 HTML 表单数据不匹配,而实际上它应该期望 JSON。
WordPressWebHookHandler is still the default
这就是导致错误的原因。如果您查看 WordPressWebHookReceiver
,ReceiveAsync()
方法实现,调用 ReadAsFormDataAsync()
方法,这不是您想要的,因为您的Content-Type
是json
。所以,您想执行 ReadAsJsonAsync()
。
解决方案:不要使用 WordPressWebHookReceiver
并将其切换到另一个将调用 ReadAsJsonAsync()
的对象。
I am thinking maybe I need a custom WebHook instead of the WordPress specific one as this is a WooCommerce Webhook.
你的想法是对的,所以我挖掘了一些代码来解释为什么会发生这种情况。
下面的代码块是在 WordPressWebHookReceiver 中重写的 ReceiveAsync()
方法.您可以看到它正在调用 ReadAsFormDataAsync()
,这不是您想要的...
public override async Task<HttpResponseMessage> ReceiveAsync(
string id, HttpRequestContext context, HttpRequestMessage request)
{
...
if (request.Method == HttpMethod.Post)
{
// here is what you don't want to be called
// you want ReadAsJsonAsync(), In short, USE A DIFFERENT RECEIVER.
NameValueCollection data = await ReadAsFormDataAsync(request);
...
}
else
{
return CreateBadMethodResponse(request);
}
}
在存储库中快速搜索调用 ReadAsJsonAsync()
方法的类,显示以下接收者实现了它:
我假设 CustomWebHookReceiver会满足您的要求,所以可以捕获 NuGet here .否则你可以实现你自己的,或者从这个类派生它,等等。
(从 Microsoft Documentation 复制)
Microsoft.AspNet.WebHooks.Receivers.Custom provides support for receiving WebHooks generated by ASP.NET WebHooks
Out of the box you can find support for Dropbox, GitHub, MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello, and WordPress but it is possible to support any number of other providers
WebHook Receivers are initialized by registering them, typically in the
WebApiConfig
static class, for example:public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
...
// Load receivers
config.InitializeReceiveGitHubWebHooks();
}
}
关于c# - WordPress WooCommerce ASP.net API WebHookHandler : The WebHook request must contain an entity body formatted as HTML Form Data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42293940/
大家好,所有rdf/sparql开发人员。这是一个困扰了我一段时间的问题,但是自从发布rdf和sparql规范以来,似乎没人能准确回答这个问题。 为了说明这种情况,RDF定义了几种方法来处理资源的多值
我在我的应用程序中使用 Bootstrap ,现在遇到了一个大问题。问题是 .container 元素在 1360 px 的屏幕上具有 274px 的左右边距,这是相当大的。结果,一切看起来都被挤到了
我在删除Docker容器时遇到问题-当我使用前一个命令时,它不起作用(Docker报告了容器ID,但没有删除它)。后者起作用了。据我所知,Docker语法是相同的: C:\Users\user>doc
std::back_inserter 仅适用于带有 push_back 的容器,因此它不适用于 set 和 map 另一方面,std::inserter 适用于所有容器类型。那么我可以一直使用 std
我正在开发 Spring Boot + Redis 示例。在此示例中,我开发了一些自定义方法,这些方法基于 RoleName 提取详细信息。对于以下方法 userRepository.findByRo
在我的 Swift 应用程序中尝试实现 Google Tag Manager v5 时,我遇到了以下警告,这给我带来了一些麻烦: GoogleTagManager warning: No defaul
安装了新的 Laravel 8 项目并在加载第一个实例时,出现以下错误。这很奇怪,因为我把它放在一边,后来从 Laravel 5.8 -> 6 升级了另一个项目(工作正常),当我去检查网站时遇到了类似
我有以下测试代码,它只创建一个空的 hashmap (containers.map) 并在之后填充它: hashtable = containers.Map('KeyType','char','Va
我对它们之间的差异有一点了解,但是拥有专家意见将是很棒的。 Container-Optimized Google Compute Engine Images Google Container Engi
我会模板化一个函数,以便将它与 vector、set 或任何其他 STL 容器(具有正确的 API...)一起使用 我的函数当前原型(prototype)是: vector> f ( const ve
我正在尝试匹配包含和不包含某些字符串的 Pandas DataFrame 的行。例如: import pandas df = pandas.Series(['ab1', 'ab2', 'b2', 'c
我需要在一个非常庞大的全文索引数据库中找到一些文本,但我不知道在我的查询术语变体中使用什么更好。 我看过一些使用的例子 SELECT Foo.Bar FROM Foo WHERE
Traceback (most recent call last): File "demo.py", line 132, in `result = find_strawberry(image
我正在尝试编写一个函数,其中一列包含一个子字符串并且不包含另一个子字符串。 在下面的示例中,如果我的行包含“某些项目”并且不包含“开销”,我希望我的函数返回 1。 row| example strin
我试图在文本文件中 append 包含给定字符串集的任何行。我创建了一个测试文件,在其中放置了这些字符串之一。我的代码应该将文本文件中包含这些字符串之一的任何行打印在与文本文件中的上一行相同的行上。这
我正在尝试学习如何使用 std.container 中可用的各种容器结构,但我无法理解如何执行以下操作: 1) 如何创建一个空容器?例如,假设我有一个用户定义的类 Foo,并且想要创建一个应该包含 F
$contains: [1, 2] // @> [1, 2] (PG array contains operator) $contained: [1, 2] // <@ [1,
我看到 CSS 中使用了这种“div#container”语法,我想知道它是如何工作的。有人有它的资源吗? 最佳答案 除了作为上面提到的唯一引用之外,ID 还增加了特异性(我强烈建议您阅读这篇文章或一
我有一个生成很多子对象的应用程序,每个子对象都与一些全局应用程序对象一起工作,例如在全局应用程序注册表中注册自己,更新应用程序统计信息等。 应用程序应该如何将访问这些全局对象的能力传递给 child
Here is a Sencha fiddle of my tab panel setup.按钮被动态添加到 vbox 选项卡容器中,该容器是 hbox 布局设置的一部分。选项卡容器的宽度由 flex
我是一名优秀的程序员,十分优秀!