2012-10-01 74 views
2

如何在MVC中的操作中獲取由客戶端發送的Post參數及其值?我不想向與客戶端發送的JSON結構匹配的操作方法添加參數。我想使用請求或任何其他暴露此信息的屬性。檢索郵政參數和值MVC3

例如,如果動作是:

public ActionResult Index() 

我不想寫東西像這樣達到的效果:

public ActionResult Index(MyObject object) 

哪裏myObject的是,JSON與類由客戶端發送 我想導航請求或在請求中發送的原始文本以獲取此信息

重要提示:我通過AJAX執行一個HttpPost請求,我沒有提交表單。

使用Request.InputStream工程提交信息,但不適合於Ajax。這個代碼是:

var input = new StreamReader(Request.InputStream).ReadToEnd(); 

在阿賈克斯的InputStream的情況下是空的

回答

3

我在正確的軌道上,但缺少一些東西。此代碼的工作

Request.InputStream.Position = 0; 
var input = new StreamReader(Request.InputStream).ReadToEnd(); 
2

您仍然可以訪問Request.Form對象在MVC行動。

Request.Form["name"] 
+2

這不是我要找的。目前我通過AJAX執行HttpPost請求,我沒有提交表單 –

1

您可以使用Request.InputStream直接訪問發佈數據。在這裏看到:

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

但是,它並沒有多大意義,使用MVC,如果你的主要關注的是跳過了它的「示範」的一部分。希望這有助於。

+0

這真的很好,幾乎我所需要的。它用於定期提交頁面。您可以在主文章中看到代碼。雖然它不適用於Ajax調用 –

+0

請求是請求,be是Ajax或不是。我認爲它不適合你的原因是因爲你的ajax文章是在json中,因爲json不能被.Net理解,你是否正確地解析了你的json?使用Json.net可以使事情變得更容易。 – utsavized

+0

我無法訪問原始JSON。我在哪裏找到它? –

2

我有點遲到了,但我會提供一個替代方案,可以讓你用Ajax後/形式訪問的Request.Form。這在MVC 4和jQuery 1.9.1中進行了測試。

如果控制器的Request.Form未填充到您的Ajax帖子中,很可能是因爲您手動序列化並將數據發送給contentType爲application/json(常見方案)的控制器。

這是一個jQuery.ajax示例,將不是填充控制器上的Request.Form。

// JSON serialized form data. 
    var data = {"id" : "1234", "name" : "Dave"}; 

    $.ajax({ 
     type: "POST", 
     url: serviceUrl, 
     contentType: "application/json", 
     dataType: "json", 
     data: JSON.stringify(data || {}), 
     success: function() { } 
    }); 

更改contentType將導致控制器像提交表單一樣處理帖子。

// Form encoded data. See jQuery.serialize(). 
    var data = "id=1234&name=Dave"; 

    $.ajax({ 
     type: "POST", 
     url: serviceUrl, 
     contentType: "application/x-www-form-urlencoded; charset=UTF-8", 
     dataType: "json", 
     data: data, 
     success: function() { } 
    }); 

您還可以將contentType undefined定義爲application/x-www-form-urlencoded; charset=UTF-8它是jQuery的默認值。

我要指出,我只用$.ajax更好地說明到底是怎麼回事。您也可以使用$.post,但您仍然需要發送表單編碼數據