2010-06-21 2 views
2

Я пишу вспомогательный метод в C#/ASP.NET, который передает файл в браузер, и я хотел бы узнать, был ли какой-либо контент написан в браузере до очистки заголовков/содержимого ответа и отправка байтов файлов. Если страница, которая вызывает вызов моего вспомогательного метода, настроена неправильно, кажется, что было бы возможно (возможно даже?), Чтобы «обычные» заголовки страниц и контент отправлялись в браузер до того, как я попытался очистить весь ответ и начать с файлов. Итак, есть ли способ сообщить, были ли данные уже отправлены?Как узнать, были ли данные ответа отправлены клиенту еще в 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) 
} 

ответ

0

Я не знаю, существует ли свойство вы ищете, но, как правило, это не так, как вы бы об этом. В принципе, этот вид вызова не тот, который вы хотите делать с «страницы», если под этим подразумевается экземпляр System.Web.UI.Page (который обычно является .aspx-файлами). Вместо этого используйте обработчик (.ashx) для такого рода работ. Обработчик - это реализация System.Web.IHttpHandler, и вы должны вызвать этот метод из метода ProcessRequest() (или просто поместите свою логику в пределах ProcessRequest()).