¿Para qué se usa la carpeta App_Data en Visual Studio?

156

Al crear una nueva aplicación ASP.NET en Visual Studio, se crean automáticamente un par de archivos y carpetas. Se llama una de esas carpetas App_Data.

Además, al publicar un sitio web seleccionando la opción de menú, hay Build->Publishuna casilla de verificación disponible Include files from the App_Data folder.

¿Estoy en lo cierto al suponer que los archivos incluidos en este archivo y sus subcarpetas no serán accesibles a través de la web? Por ejemplo, ¿sería seguro poner en esa carpeta los recursos que solo pretendo que el código de la aplicación use?

¿Cuál es el uso real previsto de la App_Datacarpeta?

EDITAR:

Gracias por todas las respuestas. De las respuestas recibidas hasta ahora, estoy interesado principalmente en dos puntos mencionados:

  1. App_Data es esencialmente un punto de almacenamiento para el almacenamiento de datos basado en archivos
  2. No debe ser visible por la web y es un lugar para que la aplicación web almacene y lea datos de

¿Alguien podría especificar cómo se garantiza el "no visible por la web"? ¿Puedo confiar en ese hecho al realizar una implementación estándar o debo verificar también algunas configuraciones de IIS en el servidor?

En la situación en la que tengo un conjunto de archivos pdf a los que quiero acceder solo desde la aplicación. ¿Sería la carpeta App_Data el lugar adecuado para usar, o debería crear una carpeta separada y configurar manualmente IIS para asegurar que la Web no pueda acceder?

padn
fuente

Respuestas:

119

App_Data es esencialmente un punto de almacenamiento para almacenes de datos basados ​​en archivos (a diferencia de un almacén de base de datos del servidor SQL, por ejemplo). Algunos sitios simples lo utilizan para contenido almacenado como XML, por ejemplo, generalmente donde los cargos de alojamiento de una base de datos son caros.

annakata
fuente
8
Gracias annakata por esta respuesta. Creo que el punto importante para agregar es que el contenido de App_Data no se puede ver por defecto en la web como lo menciona JaredPar. y también como comentaste "este comportamiento se puede modificar desde * .config httphandlers"
padn
¿La carpeta app_data contiene las referencias a los servicios web locales? Mi aplicación web funciona bien en .net F5 run. Pero los servicios web no funcionan después de empaquetar y desplegar en ISS ... :(
bonCodigo
1
Además, esta carpeta se utiliza para almacenar archivos de bases de datos locales.
Andrei Khotko
1
Una cosa que no se ha mencionado es que IIS reinicia el proceso web cuando se cambia un archivo, ¡pero App_Data se excluye de esto!
Peter
43

en IIS, resalte la máquina, haga doble clic en "Solicitar filtrado", abra la pestaña "Segmentos ocultos". "App_Data" aparece allí como una carpeta restringida. Sí, sé que este hilo es muy antiguo, pero aún es aplicable.

cohetes
fuente
25

El uso previsto de App_data es almacenar los datos de la aplicación para que el proceso web acceda. No debe ser visible por la web y es un lugar para que la aplicación web almacene y lea datos.

JaredPar
fuente
77
No solo "no debería", ASP.NET bloquea cualquier cosa en esa carpeta
John Sheehan es
@John, tenía la impresión de que había formas de "cambiar" ese comportamiento. Sí, definitivamente es malo hacerlo, pero no sé qué tan común o no es eso
JaredPar
¿Cómo se logra ese "no visible"? ¿La carpeta App_data tendría una configuración específica en IIS?
padn
@padn, no estoy 100% seguro acerca de la pila, pero es una carcasa especial en IIS o la pila Asp.Net. msdn.microsoft.com/en-us/library/ex526337.aspx
JaredPar
2
iirc este comportamiento puede modificarse desde * .config httphandlers
annakata
15

Es un lugar para colocar una base de datos incrustada, como Sql Server Express, Access o SQLite.

Shawn
fuente
1
O cualquier otro dato del sitio pueden usar como, por ejemplo, archivos XML (como una lista de estados / países / etc)
John Sheehan
1
¿Es una base de datos solo entonces? ¿Puedo decir, por ejemplo, algunos archivos pdf a los que quiero acceder solo a través del código, por ejemplo, utilizando el método Response.TransmitFile?
padn
55
nada - el concepto de datos no especifica un tipo de archivo o formato
annakata
13

La carpeta App_Data es una carpeta, que su proceso de trabajo asp.net también tiene derechos de sistema de archivos, pero no se publica a través del servidor web.

Por ejemplo, lo usamos para actualizar un CSV local de un formulario de contacto . Si el método preferido de los correos electrónicos falla o se requiere una consulta de la fuente de datos, los archivos App_Data están allí.

No es ideal, pero es una buena alternativa.

Ed Blackburn
fuente
10

De la documentación sobre la estructura de carpetas del proyecto web ASP.NET en MSDN:

Puede mantener los archivos de su proyecto web en cualquier estructura de carpetas que sea conveniente para su aplicación. Para facilitar el trabajo con su aplicación, ASP.NET reserva ciertos nombres de archivos y carpetas que puede usar para tipos específicos de contenido.

App_Data contiene archivos de datos de aplicaciones que incluyen archivos de base de datos .mdf, archivos XML y otros archivos de almacenamiento de datos. ASP.NET utiliza la carpeta App_Data para almacenar la base de datos local de una aplicación, como la base de datos para mantener la membresía y la información de roles. Para obtener más información, consulte Introducción a la membresía y comprensión de la gestión de roles .

eKek0
fuente
7

La intención principal es mantener los archivos de la base de datos de su aplicación.

Y no, esto no será accesible desde la web de forma predeterminada.

Martin Brown
fuente
7

Lo usamos como un área de almacenamiento temporal para archivos csv cargados. Una vez cargado, un método ajax procesa y elimina el archivo.

gumps
fuente
6

El uso previsto para App_Data es almacenar el archivo relacionado con la base de datos. Por lo general, los archivos .mdf de SQL Server Express.

WebMatrix
fuente