在Visual Studio中,App_Data文件夹有什么用?

168
在Visual Studio中创建新的ASP.NET应用程序时,会自动创建一些文件和文件夹。其中一个文件夹称为App_Data
另外,在选择菜单选项Build->Publish发布网站时,可以勾选包括来自App_Data文件夹的文件复选框。
我是否正确地认为,放在此文件夹及其子文件夹中的文件将无法通过Web访问?例如,将只供应用程序代码使用的资源放在该文件夹中是否安全? App_Data文件夹的真正预期用途是什么?
编辑:
感谢所有答案。从迄今收到的答案中,我最感兴趣的是提到的两个要点:
1. App_Data本质上是基于文件的数据存储的存储点 2.它不应该被Web查看,是Web应用程序存储和读取数据的地方 有人能否说明如何确保“不能被Web查看”?在执行标准部署时,我是否可以依赖这一事实,还是需要在服务器上检查一些IIS设置?
在我有一组PDF文件,希望只能从应用程序中访问的情况下,App_Data文件夹是否是正确的使用位置?还是我应该创建一个单独的文件夹并手动设置IIS以确保它不能被Web访问?
9个回答

128

App_Data本质上是文件数据存储的一个存储点(与SQL服务器数据库存储相对)。一些简单的网站会使用它来存储例如XML格式的内容,通常是因为使用数据库会产生高昂的托管费用。


9
感谢annakata的回答。我认为需要补充的重要一点是,如JaredPar所提到的,App_Data的内容默认情况下无法被Web查看。正如你所评论的那样,“这种行为可以从*.config httphandlers进行修改”。 - padn
应用程序数据文件夹中是否包含对本地 Web 服务的引用?我的 Web 应用程序在 .net F5 运行时运行良好。但是,在打包和部署到 ISS 后,Web 服务无法工作... :( - bonCodigo
1
同时,该文件夹用于存储本地数据库文件。 - Andrei Khotko
2
还没有提到的一件事是,当文件改变时,IIS会重新启动Web进程,但是App_Data被排除在外! - Peter

48
在IIS中,选择计算机后,双击“请求筛选”,打开“隐藏段”选项卡。 "App_Data"在那里被列为受限文件夹。 是的,我知道这个帖子真的很老了,但这仍然适用。

26

App_data的预期用途是为Web进程存储应用程序数据。它不应该可被Web查看,而是一个Web应用程序存储和读取数据的地方。


7
不仅仅是“不应该”,那个文件夹中的任何内容都被禁止由ASP.NET提供服务。 - John Sheehan
@John,我曾经认为有方法可以“改变”这种行为。是的,这样做绝对是邪恶的,但我不知道这种情况有多普遍。 - JaredPar
“不可查看”是如何实现的?在IIS中,App_data文件夹是否有特定的设置? - padn
@padn,我不确定堆栈的情况,但它可能是在IIS或Asp.Net堆栈中特殊处理的。http://msdn.microsoft.com/en-us/library/ex526337.aspx - JaredPar
2
如果我没记错的话,这种行为可以从*.config httphandlers进行修改。 - annakata

16

这是一个用于嵌入式数据库(例如Sql Server Express、Access或SQLite)的存放位置。


1
或者网站可能使用的任何其他数据,例如XML文件(如州/国家等列表) - John Sheehan
1
这只是一个数据库吗?我可以将一些例如pdf文件放在其中,然后通过代码访问它们,例如使用Response.TransmitFile方法吗? - padn
5
任何数据的概念并不特指文件类型或格式。 - annakata

13

App_Data文件夹是一个文件夹,你的ASP.NET工作进程有文件系统权限,但不会通过Web服务器发布。

比如,我们使用它来更新“联系我们”表单的本地CSV。如果首选的电子邮件方法失败或需要查询数据源,则可使用App_Data文件。

这并不理想,但它是一个不错的后备方案。


10

根据MSDN中关于ASP.NET Web项目文件夹结构的文档:

您可以将Web项目的文件保存在任何方便您应用程序的文件夹结构中。为了更容易地使用应用程序,ASP.NET保留了某些文件和文件夹名称,可用于特定类型的内容。

App_Data 包含应用程序数据文件,包括.mdf数据库文件、XML文件和其他数据存储文件。App_Data文件夹用于存储应用程序的本地数据库,例如用于维护成员身份和角色信息的数据库。有关更多信息,请参见Membership介绍理解角色管理


7
主要目的是将应用程序的数据库文件保留在内部。默认情况下,这不会从网络上访问。

7
我们将其用作上传CSV文件的临时存储区。上传后,一个ajax方法会处理并删除该文件。

6

App_Data的预期用途是存储与数据库相关的文件,通常是SQL Server Express .mdf文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接