如何在MVC中的操作中获取客户端发送的Post参数及其值?我不想在与客户端发送的JSON结构匹配的action方法中添加参数。我想使用请求或公开此信息的任何其他属性。
例如,如果操作是:
public ActionResult Index()
我不想写这样的东西来实现结果:
public ActionResult Index(MyObject object)
其中MyObject是与客户端发送的JSON匹配的类 我想浏览请求中发送的请求或原始文本以获取此信息
重要提示:我正在通过AJAX执行HttpPost请求,我没有提交表单。
使用Request.InputStream适用于提交帖子,但不适用于Ajax。代码是:
var input = new StreamReader(Request.InputStream).ReadToEnd();
对于Ajax,InputStream为空
答案 0 :(得分:3)
我在正确的轨道上,但缺少了一些东西。此代码有效
Request.InputStream.Position = 0;
var input = new StreamReader(Request.InputStream).ReadToEnd();
答案 1 :(得分:2)
您仍然可以访问MVC操作中的Request.Form
对象。
Request.Form["name"]
答案 2 :(得分:2)
我参加派对有点晚了,但我会提供一个替代方案,允许您使用Ajax帖子/表单访问Request.Form。这在MVC 4和jQuery 1.9.1中进行了测试。
如果控制器的Request.Form没有为您的Ajax帖子填充,可能是因为您手动序列化并将数据发送到控制器,其内容类型为application/json
(常见情况)。
这是一个jQuery.ajax示例, NOT 在控制器上填充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未定义为application/x-www-form-urlencoded; charset=UTF-8
,这是jQuery默认值。
答案 3 :(得分:1)
您可以使用Request.InputStream
直接访问帖子数据。见这里:
http://msdn.microsoft.com/en-us/library/system.web.httprequest.inputstream.aspx
但是,如果您的主要关注点是跳过其“模型”部分,那么使用MVC没有多大意义。希望这会有所帮助。