直接访问发布数据

And*_*ewC 49 asp.net-mvc

我在我的一个控制器中有一个动作,它将从我的MVC网站外部接收HTTP POST请求.

所有这些POST请求都将具有相同的参数,我需要能够解析参数.

如何从操作中访问帖子数据?

这可能是一个非常简单的问题!

谢谢

Jim*_*lla 54

您可以在以下位置获取HTTP Reques中的POST数据Request.Form.

  • 如果数据被发布为`application/json`,那么数据会在哪里? (8认同)
  • 有趣的是`Request.Form`.更有意思的是,27张选票是为了"你的意思是......?",这是一个没有解释或进一步阅读链接的半回答. (6认同)
  • 那没关系.Request.Form只是POST值的包装器. (4认同)
  • 这里(可能)为什么该属性被称为`Form`:当Web浏览器从Web表单元素发送POST请求时,标准的Internet媒体类型是"application/x-www-form-urlencoded".[1] 这是一种用于编码具有可能重复键的键值对的格式.每个键值对由"&"字符分隔,每个键与其值分隔一个"="字符.通过用"+"字符替换空格然后对所有其他字符使用URL编码来转义键和值. - [维基百科](http://en.wikipedia.org/wiki/POST_(HTTP)) (3认同)
  • 我也发送帖子数据为"application/json".我无法在Request.Form或Request.InputStream中查看POST.控制器在解析数据后以某种方式删除数据吗?然后存储在别的地方?如果发生错误,我正在尝试访问此数据以记录POST数据.这篇文章说InputStream在第一次被访问后被释放,所以也许这就是正在发生的事情...... http://omicron-llama.co.uk/2013/02/14/asp-net-modules-reading -inputstream与 - 的StreamReader / (2认同)

Bra*_*itz 38

string data = new System.IO.StreamReader(Request.InputStream).ReadToEnd(); 
Run Code Online (Sandbox Code Playgroud)

  • 别忘了添加`Request.InputStream.Position = 0;`否则你可能会添加一个空字符串. (5认同)
  • 很多时候,在这种情况下,您需要将POSTED数据强制转换为对象.由于它通常是JSON,请参阅http://forums.asp.net/t/1814643.aspx?Convert+JSON+string+to+custom+Object+ (2认同)

Tom*_*ess 19

使用

Request.InputStream 
Run Code Online (Sandbox Code Playgroud)

这将为您提供对HTTP消息正文的原始访问,该消息将包含所有POST变量.

http://msdn.microsoft.com/en-us/library/system.web.httprequest.inputstream.aspx


TWi*_*lly 14

我在MVC控制器内部后试图访问POST数据.InputStream已经被控制器解析,因此我需要将InputStream的位置重置为0以便再次读取它.

这段代码对我有用......

 HttpContext.Current.Request.InputStream.Position = 0;
 var result = new System.IO.StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd();
Run Code Online (Sandbox Code Playgroud)


小智 5

Stream req = Request.InputStream;
            req.Seek(0, System.IO.SeekOrigin.Begin);
            string json = new StreamReader(req).ReadToEnd();

            JavaScriptSerializer serializer = new JavaScriptSerializer();
            dynamic items = serializer.Deserialize<object>(json);
            string id = items["id"];
            string image = items["image"];
Run Code Online (Sandbox Code Playgroud)

///您可以按名称或索引访问参数