ModelBinding:MVC4 / C中的POST数据(可能来自Ruby)#
我们正在与chargify
http://www.chargify.com集成,我需要在我们的MVC4 / C#服务器中处理来自Chargify的webhook.
Chargify以(ruby)方式发送POST数据 – 子对象在方括号中分隔,如下所示: POST /1ffaj2f1 HTTP/1.1 X-Chargify-Webhook-Signature: 526ccfd9677668674eaa6ba5d447e93a X-Chargify-Webhook-Id: 11238622 User-Agent: Ruby Host: requestb.in Content-Type: application/x-www-form-urlencoded Content-Length: 5159 Connection: close Accept-Encoding: gzip,deflate Accept: */*; q=0.5,application/xml id=11238622&event=payment_success&payload[subscription][activated_at]=2013-05-22%2001%3A25%3A20%20-0400&payload[subscription][balance_in_cents]=0&... 问题是在.NET端,默认模型绑定器不喜欢方括号[],而是期望子对象以点分表示法分隔,如a.b.c.d = value 我有什么选择让模型绑定器工作?我能想到以下几点: >使用委托处理程序挂钩请求,读取req主体并将[]替换为点(.).然而,这至少让人感到有点冒险 什么是最好的方式,我该如何去做. 解决方法
所以我想我终于使用Request.Filter属性
(msdn)解决了这个问题
还要注意 – 在MVC中没有委托处理程序 – 这是WebApi的东西(其中一些东西只是为了让你误入歧途!) 基本上,在Stream上写了一个装饰器来读取输入流,用点替换方括号,然后将其存储在另一个流中. 代码here.随意分叉:) [更新 – 2013.08.19]:正如评论中@benpage所述,我们还需要原始的未经修改的SHA256验证流.我最终从装饰器中暴露了未修改的流内容,并向下转换控制器中的Request.InputStream属性,以获取未修改的内容以进行签名验证. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |