我如何正确地逃脱POST身体?

时间:2015-02-14 05:40:58

标签: c# .net http

我需要使用POST请求向服务器发送一些JSON值;发送它们没有任何转义工作正常,但这不是一个正确的解决方案,因为这些值可能包含特殊的符号,如?和& 我已经尝试过其他问题的答案(Uri.EscapeDataString,Uri.EscapeUriString,System.Net.WebUtility.UrlEncode,System.Web.HttpUtility.UrlEncode),但它们都会让服务器返回一个"错误请求&# 34;错误。
如何正确退出POST值正确

1 个答案:

答案 0 :(得分:2)

在我们的评论聊天之后,我想我已经足够了解你要求的答案了。所以这里。

我看到有三个略有不同的问题。

  1. 如何逃脱HTTP POST请求的正文?
  2. 我引用我对此的评论,因为它非常完整。

      

    HTTP请求主体(POST或其他)只是字节,其长度由Content-Length标头确定(或者如果正在使用分块编码,则为此效果)。你不必担心任何被转义的东西才能发挥作用,逃脱只会在下一级进入,即内容类型。

    基本上,没有任何本地要求进行任何类型的逃避,以便通过香草邮政。

    1. application/jsonapplication/x-www-formurl-encoded如何一起玩?
    2. 在大多数情况下,他们只是没有。他们可以,而且我认为我之前已经看过它,但我无法想到你为什么要这样做。

      仅仅是为了背景,为了确保我们在同一页面上,这里是相同的对象,序列化为JSON并分别形成数据。

      普通对象(用于比较):

      PropertyName: The value is "1 & 2"
      OtherProperty: 2
      

      JSON:

      {
          "PropertyName" : "The value is \"1 & 2\"",
          "OtherProperty" : 2
      }
      

      表格数据:

      PropertyName=The%20value%20is%20%221%20%26%202%22&OtherProperty=2
      

      正如你所看到的那样,这个价值变得非常混乱。但你明白了。

      所以,是的,你可以合理地将一个嵌套在另一个中,但是没有多少使用案例,这是有道理的。

      1. 如何逃避JSON?
      2. 如果您正在使用图书馆,该图书馆应该(如果它有价值)为您做这件事。例如,JSON.net将会。我相信你唯一不得不担心逃避的是JSON中的双引号,但我不是专家,而且我不会感到惊讶,因为我知道有边缘情况。

        我会再次引用我的评论,因为它似乎对你有所帮助。

          

        在大多数现代API("大多数"和#34;现代"在那里进行解释),JSON是一个非常合理的期望,是的。那么我们回到我的第一个评论,并说你只需要担心在JSON元素本身内转义,如果你正在使用库,那么应该为你处理。由于显而易见的原因,你显然不想进行双重编码。

             

        当然,测试整个设置的快捷方法就是尝试提交常规数据(控件)并确保它有效,然后提交带双引号的内容,如果需要,还可以提问题

        如果你进行了测试而第二次测试失败了,那么很有可能没有财产被转义。这可能是使用调试工具的好时机,或者甚至只是像Fiddler这样的应用程序检查请求有效负载是否存在任何不合理的情况,例如,如果您的JSON看起来像{ "name":"val"ue" }