2

如何在 MVC 中的操作中获取客户端发送的 Post 参数及其值?我不想在与客户端发送的 JSON 结构相匹配的操作方法中添加参数。我想使用 Request 或任何其他公开此信息的属性。

例如,如果操作是:

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

4 回答 4

3

我在正确的轨道上,但缺少一些东西。此代码有效

Request.InputStream.Position = 0;
var input = new StreamReader(Request.InputStream).ReadToEnd();
于 2012-10-02T20:00:46.627 回答
2

您仍然可以访问Request.FormMVC 操作中的对象。

Request.Form["name"]
于 2012-10-01T17:44:40.070 回答
2

我参加聚会有点晚了,但我将提供一个替代方案,允许您使用 Ajax 帖子/表单访问 Request.Form。这在 MVC 4 和 jQuery 1.9.1 中进行了测试。

如果控制器的 Request.Form 没有为您的 Ajax 帖子填充,可能是因为您手动序列化数据并将数据发送到 contentType 为的控制器application/json(常见场景)。

这是一个不会在控制器上填充 Request.Form 的 jQuery.ajax 示例。

    // 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,尽管您仍然需要发送表单编码数据

于 2013-03-12T14:42:57.950 回答
1

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

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

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

于 2012-10-01T20:00:33.883 回答