ModelBinding:MVC4/C中的POST数据(可能来自Ruby)com集成,我需要在我们的MVC4/C#服务器中处理来自Chargify的webhook。Chargify以(ruby)方式发送POST数据——子对象用方括号分隔,如下所示:POST/1ffaj2f1HTTP/1.1X-Chargify-Webhook-Signature:526ccfd9677668674eaa6ba5d447e93aX-Chargify-Webhook-Id:11238622User-Agent:Ruby主机:requestb.in内容类型:application/x-www-form-urlencoded内容长度:5159连接:关闭接受编码:gzip,放气接受:*/*;q=0.5,application/xmlid=11238622&event=payment_success&payload[subscription][activated_at]=2013-05-22%2001%3A25%3A20%20-0400&payload[subscription][balance_in_cents]=0&...问题是在在.NET方面,默认模型绑定器不喜欢方括号[],而是期望子对象由点符号分隔,如abcd=value我必须使用哪些选项才能使模型绑定器工作?我可以想到以下几点:使用委托处理程序来挂钩请求,读取请求正文并将[]替换为点(.)。但是,至少编写一个可以与[]一起使用的自定义模型绑定器感觉有点冒险-希望以某种方式委托给默认处理程序。不确定发生了什么-但很想听听一些想法。只需在Action中使用formcollection参数即可。处理表单集合键以形成基于键的递归字典。这也意味着我必须处理整个字符串(日期、ID等)。最好的方法是什么,我该如何处理。所以我想我最终使用Request.Filter属性(msdn)解决了这个问题另请注意-MVC中没有委托处理程序-这是WebApi的东西(其中一些只是为了让你误入歧途!)基本上,在装饰器中写了在Stream上读取输入流,用点替换方括号,并将其存储在另一个流中。在Application_BeginRequest中检查传入的请求是否针对“正确的”控制器,如果是,则创建装饰器的实例并将其设置为Request.Filter。代码在这里。随意fork:)[更新-2013.08.19]:正如@benpage在评论中提到的,我们还需要原始未修改的流来进行SHA256验证。我最终在装饰器中暴露了未修改的流内容,并在控制器中向下转换Request.InputStream属性以获取未修改的内容以进行签名验证。以上就是C#学习教程:ModelBinding:POSTdatainMVC4/C(maybefromRuby)#全部内容分享,如果对大家有用,需要详细了解C#学习教程,希望大家多多付出注意——本文来自网络收藏,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
