检索Post参数和值MVC3

时间:2012-10-01 17:42:32

标签: .net asp.net-mvc-3

如何在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为空

4 个答案:

答案 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默认值。

我会注意到我只使用$.ajax来更好地说明正在发生的事情。您也可以使用$.post,但仍需要发送表单编码数据

答案 3 :(得分:1)

您可以使用Request.InputStream直接访问帖子数据。见这里:

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

但是,如果您的主要关注点是跳过其“模型”部分,那么使用MVC没有多大意义。希望这会有所帮助。