Запись файлов в App_Data приводит к тому, что tempdata становится нулевым - PullRequest
1 голос
/ 10 ноября 2009

У меня есть небольшое веб-приложение asp.net MVC 1, которое может хранить файлы и создавать каталоги в каталоге App_Data. Когда операция записи завершается успешно, я добавляю сообщение в tempdata и делаю redirectToRoute. Проблема в том, что tempdata имеет значение null, когда выполняется действие. Если я записываю файлы в каталог за пределами корневого каталога веб-приложений, tempdata не является нулевым, и все работает правильно. Любые идеи, почему запись в app_data, кажется, очищает tempdata?

редактирование: если DRS.Logic.Repository.Manager.CreateFile (path, hpf, comment) записывает в App_Data, TempData будет нулевым в действии, на которое перенаправляется. если это каталог вне корня веб-приложения, это нормально. Никаких исключений не выбрасывается.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(int id, string path, FormCollection form)
{
    ViewData["path"] = path;
    ViewData["id"] = id;

    HttpPostedFileBase hpf;

    string comment = form["FileComment"];
    hpf = Request.Files["File"] as HttpPostedFileBase;

    if (hpf.ContentLength != 0)
    {
        DRS.Logic.Repository.Manager.CreateFile(path, hpf, comment);
        TempData["notification"] = "file was created";
        return RedirectToRoute(new { controller = "File", action ="ViewDetails", id = id, path = path + Path.GetFileName(hpf.FileName) });
    }
    else
    {
        TempData["notification"] = "No file were selected.";
        return View();
    }
}

1 Ответ

1 голос
/ 11 ноября 2009

Понял, что заставляет tempdata становиться нулевым. DRS.Logic.Repository.Manager.CreateFile (путь, hpf, комментарий); создает временный каталог в ~ / App_Data /, записывает файл в этот каталог, фиксирует этот файл в хранилище и затем очищает временный каталог. Кажется, что определенные операции ввода-вывода в App_Data запускают монитор файловой системы, и веб-приложение перезапускается. Я использовал сеанс inproc, чтобы при перезапуске приложения сеанс очищался. Tempdata фактически сохраняется в сеансе, поэтому он также был очищен. Решение: не используйте сеанс inproc и не храните файлы вне корневого каталога веб-приложения. Я понятия не имел, что изменения в App_data вызвали перезапуск приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...