【问题标题】:Retrieving Post parameters and values MVC3检索 Post 参数和值 MVC3
【发布时间】:2012-09-22 14:17:17
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您仍然可以在 MVC 操作中访问 Request.Form 对象。

      Request.Form["name"]
      

      【讨论】:

      • 这不是我要找的。目前我正在通过 AJAX 执行 HttpPost 请求,我没有提交表单
      【解决方案3】:

      我参加聚会有点晚了,但我会提供一个替代方案,让您可以使用 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 保留为未定义 application/x-www-form-urlencoded; charset=UTF-8 这是 jQuery 默认值。

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

        • 这个真的很好,几乎是我需要的。它适用于常规页面提交。您可以在主要文章中查看代码。虽然它不适用于 Ajax 调用
        • 请求是请求,是不是Ajax。我认为它不适合你的原因是因为你的 ajax 帖子是在 json 中,因为 .Net 不能自然理解 json ......你是否正确解析了你的 json?使用 Json.net 可以让事情变得更简单。
        • 我无权访问原始 JSON。我在哪里可以找到它?
        • - 从 Request.InputStream 中获取 Request body - 读取输入流并将其转换为字符串 - 使用 Json.Net 反序列化 json 对象 - 这时候,您可能希望构建一个强类型模型,或者不是(如上所述)
        猜你喜欢
        • 2010-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-02
        • 1970-01-01
        相关资源
        最近更新 更多