asp.net-mvc – MVC控制器:从HTTP正文获取JSON对象?
发布时间:2020-12-15 19:42:03 所属栏目:asp.Net 来源:网络整理
导读:我们有一个MVC(MVC4)应用程序,有时可能会得到一个JSON事件从第三方POST到我们的特定URL(“http://server.com/events/”)。 JSON事件在HTTP POST的正文中,正文是严格的JSON(Content-Type:application / json – 不是在某些字符串字段中使用JSON的表单 – p
我们有一个MVC(MVC4)应用程序,有时可能会得到一个JSON事件从第三方POST到我们的特定URL(“http://server.com/events/”)。 JSON事件在HTTP POST的正文中,正文是严格的JSON(Content-Type:application / json – 不是在某些字符串字段中使用JSON的表单 – post)。
如何在控制器的主体内部接收JSON主体?我试过下面但没有得到任何东西 [编辑]:当我说没有得到任何东西我的意思是jsonBody总是null,无论我定义为对象还是字符串。 [HttpPost] // this maps to http://server.com/events/ // why is jsonBody always null ?! public ActionResult Index(int? id,string jsonBody) { // Do stuff here } 注意,我知道如果我给一个强类型的输入参数声明方法,MVC做整个解析和过滤,即。 // this tested to work,jsonBody has valid json data // that I can deserialize using JSON.net public ActionResult Index(int? id,ClassType847 jsonBody) { ... } 然而,我们得到的JSON是非常多样的,所以我们不想为每个JSON变量定义(和维护)数百个不同的类。 我测试这个由以下curl命令(这里的JSON的一个变体) curl -i -H "Host: localhost" -H "Content-Type: application/json" -X POST http://localhost/events/ -d '{ "created": 1326853478,"data": { "object": { "num_of_errors": 123,"fail_count": 3 }}} 解决方法
似乎如果
> Content-Type:application / json和 然后MVC没有真正绑定到任何特定的类的POST主体。也不能只是获取POST主体作为ActionResult的参数(在另一个答案中建议)。很公平。您需要自己从请求流中提取它并处理它。 [HttpPost] public ActionResult Index(int? id) { Stream req = Request.InputStream; req.Seek(0,System.IO.SeekOrigin.Begin); string json = new StreamReader(req).ReadToEnd(); InputClass input = null; try { // assuming JSON.net/Newtonsoft library from http://json.codeplex.com/ input = JsonConvert.DeserializeObject<InputClass>(json) } catch (Exception ex) { // Try and handle malformed POST body return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } //do stuff } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 为什么开发人员在实现版本控制时如此珍贵地发布API?
- asp.net LinkBut??ton HyperLink问题
- asp.net – Web服务中的循环引用
- asp.net-mvc – ASP.NET MVC强类型部分视图,无法加载类型错
- asp.net-mvc-2 – ASP.NET MVC和存储库模式理解
- asp.net – HttpContext.Current如何工作?
- ASP.Net中的日期差异
- asp.net – 如何防止在BundleTransformer中使用* .min.js?
- ASP.NET 2.0:编写错误页面的最佳实践
- asp.net-mvc – 以任何方式配置配置visual studio mvc构建视
推荐文章
站长推荐
- asp.net – 无法弄清楚如何将我的NON-MVC站点从s
- asp.net-mvc-3 – Autofac等同于Ninject的WhenIn
- asp.net – 如何将AD身份验证SSO与现有的Forms身
- iis – 经典ASP上的500服务器错误 – 无法获得更
- 从.NET开始 – ASP.NET,WPF,Silverlight或命令行
- .net – 在WebApi中,我应该在哪里调用ActionFilt
- asp.net-mvc – 如何从模型中为ASP.NET MVC Drop
- EFCore 5 中的 DbContextFactory
- asp.net中的带宽监控
- asp.net – 如何在javascript中检测/跟踪回发?
热点阅读