2011-10-21 33 views
1

場景: 我的Rails服務器端有一個Board模型,Android設備正試圖通過POST向某個特定的主板發佈一些內容。最後,服務器需要向Android設備發送迴應。如何手動解析POST到我的Rails 3.1服務器?

如何手動解析POST(或我需要)?我不知道如何處理這種外部請求。我看着金屬,中間件,HttpParty;但他們都不符合我想要做的。我想手動解析它的原因是因爲我想要的一些信息不會成爲參數的一部分。

有沒有人知道一種方法來解決這個問題?

我也在考慮以後使用SSL,這會如何影響問題?

預先感謝您! :)

+1

我發現一些有用的東西:http://rails.nuvvo.com/lesson/6377-action-controller-the-request-and-response-objects – jchenjc

回答

-1

不確定您的意思是「手動」,帖子通常由控制器中的「創建」或「更新」方法處理。查看您的Board模型的控制器,並且可以將代碼添加到適當的方法。您可以使用參數散列來訪問參數。

您應該更具體地瞭解您正在嘗試做什麼。 :)

+0

我想手動解析它的原因是因爲一些信息我想不會成爲參數的一部分。 – jchenjc

0

我試圖從ie9到我的rails應用程序的跨域請求,我需要手動解析POST的主體,因爲ie9的XDR對象限制我們可以發送到text/plain的contentType,而不是​​(見this post)。最初我剛剛使用控制器提供的params散列,但是一旦我在我的ajax請求中限制contentType和dataType,那個散列不再包含正確的信息。

在上面的評論(link)之後,我瞭解瞭如何恢復該信息。作者提到在軌道控制器中,我們總是可以訪問request變量,該變量爲我們提供了ActionDispatch::Request object的一個實例。我試圖使用request.query_string來獲取請求主體,但是它只是返回一個空字符串。然而,在API中窺探一下,發現了raw_post方法。該方法正是我所需要的!

要「手動解析它」,您可以迭代由request.raw_post返回的字符串並執行任何您想要的操作,但我不建議這樣做。我使用Rack :: Utils.parse_nested_query,如Arthur Gunn對this question的回答中所述,將raw_post解析爲散列。一旦它以散列形式出現,就可以在其中推出您需要的任何其他內容,然後將其與params散列合併。這樣做意味着我不必在控制器中改變其他任何東西!

params.merge!(Rack::Utils.parse_nested_query(request.raw_post)) 

希望能幫助別人!