2013-02-19 56 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