System.IO.IOException在RedirectToAction之后销毁会话

时间:2012-03-19 18:49:21

标签: asp.net-mvc asp.net-mvc-3 session

  

可能重复:
  ASP.NET Session & Delete Folders

这里有很多关于类似行为的问题:

Session State is erased after calling RedirectToAction() in ASP.NET MVC 3
MVC3 destroying session on redirecttoaction
Session variable is lost on RedirectToAction in IE

然而,我遇到的情况是我有一个删除某些文件的控制器操作。我的应用程序跟踪用户的各种上传文件。删除用户后,我清理该用户的资产文件夹。用户的资产可以包含多个包含不同类型上传(文件,文档,视频等)的文件夹。

代码类似于:

if(DirectoryExists(userRootFolder))
{
  try
  {
    // Delete all of user's files and folders
    Directory.Delete(userRootFolder, true);
  }
  catch(Exception ex)
  {
    // Not a show stopper but we need to know
    Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
  }

  return RedirectToAction("Index");
}

如果由于以下原因引发System.IO.IOException异常:

System.IO.IOException: The directory is not empty.

...然后在RedirectToAction我的Session被销毁之后立即调用的操作中。

作为实验,我将Directory.Delete(userRootFolder, true);替换为:

throw new Exception("Oops!");

以及(Directory.Delete()抛出的异常):

throw new System.IO.IOException("The directory is not empty.");

但这不会导致我的会话被破坏。

我还尝试删除一个不存在的文件来强制抛出System.IO.DirectoryNotFoundException异常,这也很好,我的会话保持不变。

我还使用了Fiddler检查我的会话cookie是否被删除或修改但是仍然完好无损。

调试和发布版本以及IIS Express和Cassini上的VS2010(SP1)调试器以及完整的Windows 2008 R2 IIS7.5盒子上运行时会出现此问题。

尝试删除一个非空的文件夹会导致我的进程内会话被删除,是否会有一些灾难性的事情?

0 个答案:

没有答案