【问题标题】:Writing files in App_Data causes tempdata to be null在 App_Data 中写入文件会导致 tempdata 为空
【发布时间】:2009-11-10 13:41:22
【问题描述】:

我有一个小的 asp.net MVC 1 Web 应用程序,它可以存储文件并在 App_Data 目录中创建目录。当写操作成功时,我向临时数据添加一条消息并执行redirectToRoute。问题是执行操作时临时数据为空。如果我将文件写入 Web 应用程序根目录之外的目录中,则临时数据不为空,并且一切正常。任何想法为什么在 app_data 中写入似乎会清除临时数据?

编辑: 如果 DRS.Logic.Repository.Manager.CreateFile(path, hpf, comment) 在 App_Data 中写入,则在重定向到的操作中 TempData 将为空。如果它是 Web 应用程序根目录之外的目录,那很好。没有抛出异常。

[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();
    }
}

【问题讨论】:

  • 请贴出代码,你写到不同目录的时候还在用RedirectToRoute吗?
  • 是的,我仍然使用重定向路由。编写实际文件的代码很简单,不会引发任何异常。我们尝试了redirectToAction,结果相同。

标签: asp.net asp.net-mvc tempdata appdata


【解决方案1】:

找出导致 tempdata 变为空的原因。 DRS.Logic.Repository.Manager.CreateFile(路径,hpf,评论);在 ~/App_Data/ 下创建一个临时目录,在该目录中写入一个文件,将该文件提交到存储库,然后清理临时目录。似乎 App_Data 中的某些 io 操作触发了文件系统监视器并重新启动了 Web 应用程序。我正在使用 inproc 会话,因此当应用程序重新启动时,会话将被清除。临时数据实际上存储在会话中,因此它也被清除了。解决方案:不要使用 inproc 会话或将文件存储在 Web 应用程序的根目录之外。我不知道 App_data 下的更改触发了应用程序重启。

【讨论】:

  • 嗯。您说写入 app_data 导致应用程序重新启动?有哪些特定的 IO 操作?看看 ASP.Net 实际报告了什么会很有趣:weblogs.asp.net/scottgu/archive/2005/12/14/433194.aspx
  • 看来导致重启的IO操作是删除文件夹。
  • 经历了同样的场景。但是我的情况是在 bin 文件夹中,我尝试创建一个文件夹并在其中写入文件,但这会导致并发字典始终为空
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 2020-09-29
  • 2013-05-15
  • 1970-01-01
相关资源
最近更新 更多