Недавно мы столкнулись со странной проблемой с обработчиком загрузки файлов http, разработанным с использованием C # 4.0.
Веб-приложение разработано с использованием ASP.NET 4.0 и размещено на IIS 7.0 поверх ssl. Это сработало правильно. Но в последнее время из-за некоторых изменений в конфигурации или на сайте мы сталкиваемся с проблемой, перечисленной ниже.
Когда мы загружаем текстовый файл, он выдает ненужные данные. Тот же файл работает нормально, если я использую код на странице aspx вместо обработчика. Оба имеют одинаковый код. Некоторые файлы работают нормально. например, файл изображения или PDF-файл работает нормально. Но с текстовым файлом поведение очень противоречиво. Пустой текстовый файл работает нормально. Я попытался сравнить два ответа (handler vs codebehind
), и кажется, что возвращаемая длина содержимого не совпадает.
context.Response.Clear();
context.Response.ClearHeaders();
context.Response.ClearContent();
context.Response.ContentType = !String.IsNullOrEmpty(mime) ? mime : "application/octet-stream";
context.Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}", fileName));
//context.Response.AppendHeader("Content-Length", buffer.Length.ToString());
context.Response.OutputStream.Write(buffer, 0, buffer.Length);
context.Response.End();
Код за
HTTP / 1.1 200 OK Сервер: Сервер разработки ASP.NET / 10.0.0.0 Дата: чт,
06 октября 2011 02:52:26 GMT X-AspNet-версия: 4.0.30319
Содержание-Диспозиция: вложение; filename = my junk.txt Cache-Control:
private Content-Type: text / plain Содержание-Длина: 29 Соединение: Закрыть
Это только для образца теста
HttpHandler
HTTP / 1.1 200 OK Сервер: Сервер разработки ASP.NET / 10.0.0.0 Дата: чт,
06 октября 2011 02:54:04 GMT X-AspNet-версия: 4.0.30319
Содержание-Диспозиция: вложение; filename = my junk.txt Cache-Control:
private Content-Type: text / plain Content-Length: 146 Подключение: Закрыть
I�%&/m�{J�J��t��
$ @ Ig #) ЕВА] F @ 흼 {{; Н' ? \ Fdl J ɞ! ? ~ |? " yѤ N l ͛6 I