阅读Body on chunked transfer在ASP.NET中编码的http请求

时间:2008-09-16 03:11:06

标签: asp.net asp.net-mvc chunked-encoding

J2ME客户端正在使用分块传输编码发送HTTP POST请求。

当ASP.NET(在IIS6和WebDev.exe.server中)尝试读取请求时,它将Content-Length设置为0.我想这是可以的,因为加载请求时Content-length是未知的。

但是,当我将Request.InputStream读到最后时,它返回0。

这是我用来读取输入流的代码。

using (var reader = new StreamReader(httpRequestBodyStream, BodyTextEncoding)) {
    string readString = reader.ReadToEnd();
    Console.WriteLine("CharSize:" + readString.Length);
    return BodyTextEncoding.GetBytes(readString);
}

我可以用Fiddler来模拟客户端的行为,例如

网址 http://localhost:15148/page.aspx

页眉: 用户代理:Fiddler 传输编码:分块 主持人:somesite.com:15148

车身 兔子兔子兔子。谢谢你的到来,它非常有用!

我上面的身体阅读器将返回一个零长度的字节数组... lame ...

有谁知道如何在IIS和ASP.NET Development Server(cassini)上启用分块编码?

我找到了this script用于IIS,但它无效。

2 个答案:

答案 0 :(得分:2)

似乎是官方的:Cassini does not support Transfer-Encoding: chunked requests.

  

默认情况下,客户端发送大量   通过使用分块HTTP实现二进制流   传输编码。 因为ASP.NET   开发服务器不支持   这种编码,你无法使用   这个Web服务器承载流媒体   必须接受大的数据服务   二进制流。

答案 1 :(得分:1)

该网址不再有效,因此很难直接测试。我想知道这是否有用,谷歌在bytes.com找到了有经验的人。如果你再次放置你的网站,我可以看看这是否真的有效。

Joerg Jooss 写道:( 为了简洁而稍加修改

string responseText = null;
WebRequest rabbits= WebRequest.Create(uri);
using (Stream resp = rabbits.GetResponse().GetResponseStream()) {
    MemoryStream memoryStream = new MemoryStream(0x10000);
    byte[] buffer = new byte[0x1000];
    int bytes;
    while ((bytes = resp.Read(buffer, 0, buffer.Length)) > 0) {
        memoryStream.Write(buffer, 0, bytes);
    }
    // use the encoding to match the data source.
    Encoding enc = Encoding.UTF8;
    reponseText = enc.GetString(memoryStream.ToArray());
}