Muh*_*tar 16
删除子目录时回收应用程序域,这就是您的会话将丢失并重定向到登录页面的原因.
有关更多详细信息,请查看MSDN博客中的这篇文章,并阅读为什么应用程序域可以回收?从这里 ASP.NET案例研究:失去的会话变量和appdomain回收
并检查这一个删除ASP.NET 2.0应用程序子目录关闭AppDomain
如另一个答案所述,这是因为每当您删除Web应用程序目录结构中的文件夹(即Web应用程序的根目录下)时,Web应用程序都会重新启动.
我发现此问题的唯一解决方案是将数据目录(您创建/删除/修改)移到Web应用程序的根目录/虚拟目录之外.
然后我们在文件系统中创建一个链接(联结),以便该目录显示在虚拟目录中.这可以防止ASP.NET监视数据目录以进行删除操作.
例:
C:\projectX\websiteC:\projectX\dataC:\projectX\website\data使用该程序Linkd.exe(在Windows资源工具包中提供)使用以下命令创建链接:
linkd c:\projectX\website\data c:\projectX\data
现在C:\projectX\website\data是指向真实数据目录的链接/联结.在您的Web应用程序中,您可以继续工作,就好像数据目录是Web应用程序根目录下的物理目录一样.
例如,在您的网站中,您可以使用以下代码访问数据文件夹:
Server.MapPath("~/data")
您还可以使用Windows文件浏览器并浏览到C:\ projectX\website\data.它看起来就像一个真实的目录.
如您所见,您可以继续使用链接数据文件夹,就好像它是Web应用程序目录中的普通文件夹一样.唯一的区别是ASP.NET不会跟踪删除操作的目录,因此不会重新启动应用程序.这意味着,您现在可以~/data根据需要在目录中创建/删除/修改文件夹和文件,而无需重新启动Web应用程序.