2013-02-19 61 views
1

我有一个传统系统(用ColdFusion编写)发布到我的RESTful MVC应用程序中,我试图访问发布的参数。从HTTP POST获取值

我建议在传统系统中将内容类型标题设置为application/x-www-form-urlencoded,这应该意味着controllerContext.HttpContext.Request.Form.AllKeys包含已发布的参数,但它不包含。

其他堆栈溢出帖子建议阅读controllerContext.HttpContext.Request.InputStream,但我想知道是否有不同/更简单的方法。

回答

1

仅将请求Content-Type标头设置为application/x-www-form-urlencoded可能不够。客户需要也尊重这个内容类型意思是POST请求的主体必须是这样的:

param1=value1&param2=value2&param3=value3&... 

现在,您将能够检索使用Request.Form["param1"]单个值,或者简单地通过使用视图模型,并具有您的控制器操作将此视图模型作为参数,以便您不需要从请求中手动检索这些参数。

如果客户端不尊重规范,那么您唯一的机会就是阅读Request.InputStream并手动解析它。

+0

好的 - 这很有道理。你知道我怎么能(在调试的时候)看看请求的格式是什么?这是在Request.InputStream? – MichaelS 2013-02-19 11:22:58

+0

是的,它在'Request.InputStream'里面。你可以用StreamReader读取它。 – 2013-02-19 11:24:47

+0

原来,我根本不需要设置内容类型,只要我正确地传递参数即可。我通过'URL'参数传递它们,而不是'FORMFIELD',所以这些值实际上在'Request.QueryString'中 - 不需要解析Request.InputStream。 – MichaelS 2013-02-19 12:07:40