не удается сохранить HttpPostedFileBase в переменную сеанса и использовать дважды

Доброе утро! Я пытаюсь сохранить HttpPostedFileBase (который всегда будет простым файлом CSV) в переменной сеанса, например:

    [HttpPost]
    public ActionResult Index(HttpPostedFileBase importFile) {
        Session.Remove("NoteImport");
        var noteImport = new NoteImport { ImportFile = importFile, HeaderList = NoteService.HeaderList(importFile) };
        Session["NoteImport"] = noteImport;
        return RedirectToAction("FileNote");

    }

Как видите, я выгружаю importFile в свой класс NoteImport. В настоящее время свойство ImportFile является общедоступным типом HttpPostedFileBase.

Когда я впервые использую это свойство в своей службе (метод, который создает список значений заголовка), у меня нет проблем:

    public List<string> HeaderList(HttpPostedFileBase fileStream) {
        var sr = new StreamReader(fileStream.InputStream);
        var headerString = sr.ReadLine();
        var headerArray = headerString.Split(',');
        var headerList = new List<string>();
        foreach (var header in headerArray) {
            if (!ValidateHeader(header))
                throw new InvalidDataException("Invalid header name: " + header);
            headerList.Add(header);
        }
        return headerList;
    }

Вышеупомянутое работает нормально и возвращает именно то, что мне нужно на данный момент.

Моя проблема связана с приведенным ниже кодом. Когда я вызываю ReadLine (), он ничего не получает из HttpPostedFileBase.

    public List<string> ImportFileStream(HttpPostedFileBase importFile) {
        var sr = new StreamReader(importFile.InputStream);
        var headerString = sr.ReadLine();
        var headerArray = headerString.Split(',');
        var cb = new DelimitedClassBuilder("temp", ",") { IgnoreFirstLines = 0, IgnoreEmptyLines = true, Delimiter = "," };
        foreach (var header in headerArray) {
            cb.AddField(header, typeof(string));
            cb.LastField.FieldQuoted = true;
            cb.LastField.QuoteChar = '"';
        }
        var engine = new FileHelperEngine(cb.CreateRecordClass());
        var dataTable = engine.ReadStreamAsDT(sr);
        var noteData = new List<string>();
        var jsonSerializer = new JsonSerializeDataRow();
        foreach (var row in dataTable.Rows) {
            var dataRow = row as DataRow;
            var jsonRow = jsonSerializer.Serialize(dataRow);
            noteData.Add(jsonRow);
        }
        return noteData;
    }

Я попытался закрыть HttpPostedFileBase; Я также установил позицию потока на 0. Кажется, ничего не происходит. Я чувствую, что мне нужно изменить его на другой тип перед сохранением в сеансе.

Любой совет ??

Спасибо!

6
задан BueKoW 20 January 2011 в 13:43
поделиться