如何在ASMX Web服务中接收JSON数据

问题描述

我正试图编写一个ASMX Web服务来接收来自其他位置的JSON数据块(这意味着我无法控制数据格式-已记录且一致,但在我的控制范围内)。作为测试,我创建了一个简单的网页,该网页通过AJAX请求发送相同的数据。数据肯定是作为我的POST请求的有效负载附加的: Picture of chrome devtools showing payload

但是当我尝试在ASMX Web服务中接收该数据时,我得到一个空字符串:

  [WebMethod]
  public string UpdateProjectimage() 
  {
    using (var sr = new System.IO.StreamReader(HttpContext.Current.Request.InputStream))
    {
      string json = sr.ReadToEnd(); // this comes out as an empty string!
      return json;
    }
  }

请注意,这是使用Win2008R2上运行的VS 2012和IIS 7.5构建的,我无法更改技术堆栈。

streamreader技术应该起作用,因为我从另一个起作用的Web服务复制了它-但是在这种情况下它不起作用(它只是给我一个空字符串),我也不知道为什么。这可能是一些奇怪的配置设置,但我只是不知道它可能是什么设置。

解决方法

显然,在调用sr.ReadToEnd()之前,我必须设置sr.BaseStream.Position = 0。我不是100%是“正确”的解决方案(我已经在其他地方做到了这一点,并且我不需要设置职位,而且看起来似乎很奇怪,必须这样做),但是它现在可以正常工作了,这已经足够了为我。

特别感谢Jasen向我指出了正确的方向。