Как узнать, отправлены ли данные ответа клиенту еще в ASP.NET? - PullRequest
2 голосов
/ 21 июня 2010

Я пишу вспомогательный метод в 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 голосов
/ 06 марта 2012

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

...