【问题标题】:How to get POST data as array with C#如何使用 C# 将 POST 数据作为数组获取
【发布时间】:2009-12-01 07:42:09
【问题描述】:

我正在使用 C# 开发一个 ASP.NET 处理程序,该处理程序接收从外部 Flash 程序发布的一组数据。如何将数据用作数组?似乎 ASP.NET 中使用的 HTTP 上下文会自动对发布数据进行 html 解码,以便它以简单字符串的形式出现。在这种情况下,分隔符是逗号(可能一直是逗号,以前从未使用过)。

看来我需要两件事之一:

1) 一种以 html 编码形式获取数据的方法,其中用作数组分隔符的逗号只能表示真实数组而不是客户表单输入(此时客户输入逗号将保持编码)。

2) 一种模拟 PHP print_r()var_dump() 函数的方法(我自己不了解 PHP,但有人告诉我这样做可以解决问题)将变量转储到数组中。

因此,我们将不胜感激任何有关如何做到这一点的帮助。提前致谢!

编辑 1: 发布的数据可以是例如一堆地址、邮政编码和可选的额外信息。如address=testroad%5F5,another%5Ftestroad%5F6&postalcode=12345,56789&extrainfo=,firstwasempty。在该示例中,有两个地址(%5F 等于空格)、两个邮政编码,但只有第二个地址包含 extrainfo,因为逗号前的空格为空。现在再一次,由于英语不是我的母语,问题是可能的客户编写的逗号在解码后与实际的数组拆分逗号混合在一起。

【问题讨论】:

    标签: c# arrays post


    【解决方案1】:

    我遇到了同样的问题,找到了这篇文章,但刚刚我找到了一个更好的方法。

    你应该在所有的 POST 变量上加上相同的名字,所以要发布的数据是:

    address=AddressValue1&address=AddressValue2&address=AddressValue3

    在 C# 代码脚本中,您可以通过以下方式访问数据参数:

    string[] addresses = this.Request.Form.GetValues("address");
    foreach (string address in addresses)
    {
        // Your code here ...
    }
    

    【讨论】:

      【解决方案2】:
      public void ProcessRequest(HttpContext context)
      {
          using (var reader = new StreamReader(context.Request.InputStream))
          {
              string postedData = reader.ReadToEnd();
              foreach (var item in postedData.Split(new [] { '&' }, StringSplitOptions.RemoveEmptyEntries))
              {
                  var tokens = item.Split(new [] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                  if (tokens.Length < 2)
                  {
                      continue;
                  }
                  var paramName = tokens[0];
                  var paramValue = tokens[1];
                  var values = paramValue.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                  foreach (var value in values)
                  {
                      var decodedValue = context.Server.UrlDecode(value);
                      // Do something with the decoded value which corresponds to paramName
                  }
              }
          }
      }
      

      【讨论】:

      • 谢谢,它确实得到了数据。问题是按照您的猜测解析它。我试图获取的数据是一堆地址,例如“地址”、“邮政编码”等。使用 for 循环和子字符串解析它会很麻烦。那么有没有办法在不解码内部数据的情况下以表单或“查询字符串”的形式获取数据?
      • 我已经用一个示例更新了我的答案,展示了如何使用 String.Split 来解析发布的数据。
      • 这是一个非常古老的帖子,但对于现在看到它的任何人来说,使用 Json 有更好的方法。 var reader = new StreamReader(context.Request.InputStream) string postedData = reader.ReadToEnd(); JObject obj = JObject.Parse(postedData);现在您可以使用密钥访问 obj。 var user= (string)obj["UserID"];
      【解决方案3】:

      我找到了

      Request.Params[null]
      

      指在 C# ASP.NET 中发布到页面的 RAW 数据。

      【讨论】:

        【解决方案4】:

        【讨论】:

          猜你喜欢
          • 2013-12-12
          • 2020-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-12
          相关资源
          最近更新 更多