Para que serve a pasta App_Data no Visual Studio?

156

Ao criar um novo aplicativo ASP.NET no Visual Studio, alguns arquivos e pastas são criados automaticamente. Uma dessas pastas é chamada App_Data.

Além disso, ao publicar um site, selecionando a opção de menu, Build->Publishuma caixa de seleção está disponível Include files from the App_Data folder.

Estou certo, assumindo que os arquivos inseridos neste arquivo e suas subpastas não serão acessíveis pela Web? Por exemplo, seria seguro colocar nessa pasta os recursos que pretendo apenas serem usados ​​pelo código do aplicativo?

Qual é o uso real pretendido da App_Datapasta?

EDITAR:

Obrigado por todas as respostas. Das respostas recebidas até agora, estou interessado principalmente em dois pontos mencionados:

  1. App_Data é essencialmente um ponto de armazenamento para armazenamento de dados baseado em arquivo
  2. Ele não deve ser visualizado pela Web e é um local para o aplicativo Web armazenar e ler dados de

Alguém poderia especificar como é garantido o "não visível pela web"? Posso confiar nesse fato ao executar a implantação padrão ou também preciso verificar algumas configurações do IIS no servidor.

Na situação em que tenho um conjunto de arquivos pdf, quero estar acessível apenas a partir do aplicativo. A pasta App_Data seria o local certo para usar ou devo criar uma pasta separada e definir manualmente o IIS para garantir que não seja acessível pela Web?

padn
fonte

Respostas:

119

App_Data é essencialmente um ponto de armazenamento para armazenamentos de dados baseados em arquivos (em oposição a um armazenamento de banco de dados do SQL Server, por exemplo). Alguns sites simples fazem uso dele para conteúdo armazenado como XML, por exemplo, geralmente onde as taxas de hospedagem de um banco de dados são caras.

annakata
fonte
8
Obrigado annakata por esta resposta. Penso que o ponto importante a acrescentar é que o conteúdo de App_Data, por padrão, não pode ser visualizado pela web, como mencionado por JaredPar. e também como você comentou "este comportamento pode ser modificado a partir de * .config httphandlers"
padn
A pasta app_data contém as referências aos serviços da web local? Meu aplicativo da web funciona bem na execução .net F5. Mas os serviços de web não funcionam após o empacotamento e implantação na ISS ... :(
bonCodigo
1
Essa pasta também é usada para armazenar arquivos de banco de dados local.
Andrei Khotko
1
Uma coisa que não foi mencionada é que o IIS reinicia o processo da Web quando um arquivo é alterado, mas App_Data é excluído disso!
Peter
43

no IIS, realce a máquina, clique duas vezes em "Solicitar filtragem", abra a guia "Segmentos ocultos". "App_Data" está listado lá como uma pasta restrita. Sim, eu sei que este tópico é realmente antigo, mas isso ainda é aplicável.

rocketsarefast
fonte
25

O uso pretendido de App_data é armazenar dados do aplicativo para o processo da Web acessar. Não deve ser visível pela Web e é um local para o aplicativo Web armazenar e ler dados.

JaredPar
fonte
7
Não apenas "não deveria", nada nessa pasta está impedido de ser exibido pelo ASP.NET
John Sheehan
@ John, fiquei com a impressão de que havia maneiras de "mudar" esse comportamento. Sim, definitivamente é mau fazê-lo, mas não sei quão comum ou não é isso
JaredPar
Como é que "não visível" é alcançado? A pasta App_data teria configurações específicas no IIS?
padn
@padn, não tenho 100% de certeza sobre a pilha, mas ela é especial no IIS ou na pilha do Asp.Net. msdn.microsoft.com/en-us/library/ex526337.aspx
JaredPar
2
iirc, esse comportamento pode ser modificado a partir de * .config httphandlers
annakata
15

É um lugar para colocar um banco de dados incorporado, como o Sql Server Express, Access ou SQLite.

Shawn
fonte
1
Ou quaisquer outros dados do site pode usar como, por exemplo, arquivos XML (como uma lista de estados / países / etc)
John Sheehan
1
Só é um banco de dados então? Posso dizer, por exemplo, alguns arquivos PDF, nos quais quero acessar apenas o código, por exemplo, usando o método Response.TransmitFile?
padn
5
qualquer coisa - o conceito de dados não especifica um tipo de arquivo ou formato
annakata
13

A pasta App_Data é uma pasta cujo processo de trabalho do asp.net também possui direitos de sistema de arquivos, mas não é publicado através do servidor web.

Por exemplo, usamos para atualizar um CSV local de um contato formulário de . Se o método preferencial de e-mails falhar ou qualquer consulta à fonte de dados for necessária, os arquivos App_Data estarão lá.

Não é o ideal, mas é um bom retorno.

Ed Blackburn
fonte
10

Na documentação sobre a estrutura de pastas do projeto Web do ASP.NET no MSDN:

Você pode manter os arquivos do seu projeto da Web em qualquer estrutura de pastas que seja conveniente para o seu aplicativo. Para facilitar o trabalho com seu aplicativo, o ASP.NET reserva determinados nomes de arquivos e pastas que você pode usar para tipos específicos de conteúdo.

App_Data contém arquivos de dados do aplicativo, incluindo arquivos de banco de dados .mdf, arquivos XML e outros arquivos de armazenamento de dados. A pasta App_Data é usada pelo ASP.NET para armazenar o banco de dados local de um aplicativo, como o banco de dados para manter as informações de associação e função. Para obter mais informações, consulte Introdução à associação e compreensão do gerenciamento de funções .

eKek0
fonte
7

A principal intenção é manter os arquivos de banco de dados do aplicativo em.

E não, isso não estará acessível na Web por padrão.

Martin Brown
fonte
7

Nós o usamos como uma área de armazenamento temporário para arquivos CSV carregados. Uma vez carregado, um método ajax processa e exclui o arquivo.

gumps
fonte
6

O uso pretendido para App_Data é armazenar o arquivo relacionado ao banco de dados. Geralmente, arquivos .mdf do SQL Server Express.

WebMatrix
fonte