如何判断响应数据是否已在ASP.NET中发送到客户端?

时间:2010-06-21 17:47:36

标签: asp.net streaming response httpresponse

我正在C#/ ASP.NET中编写一个帮助方法,将文件流式传输到浏览器,我希望能够在清除响应头/内容之前检测是否有任何内容已写入浏览器并发送文件字节。如果调用我的帮助方法的页面设置不正确,似乎可能(甚至可能?)“正常”页面标题和内容在我尝试清除之前被发送到浏览器整个响应并从文件数据开始。那么,有没有办法判断数据是否已被发送?

基本上,我在这个例子中寻找类似伪造的属性BytesSent的东西:

if (response.BytesSent == 0)
{
    response.ClearHeaders();
    response.ClearContent();
    response.Clear();

    response.ContentType = "application/octet-stream";
    response.AppendHeader("Content-Disposition", "attachment; filename=" + filename);
    response.AppendHeader("Content-Length", new FileInfo(path).Length.ToString());

    //
    // etc. (stream the file)
    //
}
else
{
    // throw an exception (or handle the problem in some other way)
}

1 个答案:

答案 0 :(得分:0)

我不知道你寻求的财产是否存在,但一般来说,这不是你怎么做的。基本上,这种调用不是你想要从“页面”调用的,如果你的意思是System.Web.UI.Page的实例(通常是.aspx文件)。相反,使用处理程序(.ashx)进行此类工作。处理程序是System.Web.IHttpHandler的实现,您应该在ProcessRequest()方法中调用此方法(或者只是将您的逻辑放在ProcessRequest()中)。