【问题标题】:Reading PUT Request Body阅读 PUT 请求正文
【发布时间】:2011-06-16 09:15:50
【问题描述】:

我花了很多时间试图弄清楚为什么同一行在 Post() 中将请求正文作为字符串返回,在 Put() 中返回空字符串,以及最终如何在 Put() 中获取请求正文。

[HttpPost]
public JsonResult Post()
{
    ...
    var todoJson = new StreamReader(Request.InputStream).ReadToEnd();
    ...
}

[HttpPut]
public JsonResult Put(int id)
{
    ...
    var todoJson = new StreamReader(Request.InputStream).ReadToEnd();
    ...

}

基于 ((System.Web.HttpInputStream)(Request.InputStream))._data._data 我在 Put() 中得到的,字节值在请求正文中,但是我无法提取内容。 非常感谢任何帮助。

编辑:HttpRequest.InputStream 文档中的方法在 Post() 中有效,在 Put() 中它返回字符串“\0\0\0\0\0\0\0\0\0\0\0\ 0\0\0\0\0\0\0\0\0\0\0\0..." 的内容长度。

【问题讨论】:

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


    【解决方案1】:

    我早该看到 Request.InputStream.Position 指向请求正文的结尾,所以

    Request.InputStream.Position = 0;
    

    解决问题。

    【讨论】:

      【解决方案2】:

      这可能是因为浏览器没有广泛支持 HTTP Put,如 SO Post 中所述:Doing a HTTP PUT from a browser。您可能最好坚持使用 GET 和 POST 以获得最广泛的兼容性。但是,我听说过可以使用原始 HttpWebRequest 执行 put 的代码,例如 Jason DeFontes 在这篇文章中的 outlined here

              string json = "...";
              byte[] arr = System.Text.Encoding.UTF8.GetBytes(xml);
              HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/");
              request.Method = "PUT";
              request.ContentType = "application/json";
              request.ContentLength = arr.Length;
              Stream dataStream = request.GetRequestStream();
              dataStream.Write(arr, 0, arr.Length);
              dataStream.Close();
              HttpWebResponse response = (HttpWebResponse)request.GetResponse();
              string returnString = response.StatusCode.ToString();
              Console.WriteLine(returnString);
      

      【讨论】:

      • 谢谢,读得很好。我看过这段代码,问题是浏览器正在发送 PUT。更清楚地说,我基本上是在为骨干网 todo 应用程序做一个 RESTful 处理程序,所以所有的 GET、POST、PUT、DELETE 请求都由骨干网发送,并为为 Google App Engine 编写的same app 工作。所以看起来请求正文在那里,我就是看不懂。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多