Esta pergunta existe porque tem significado histórico, mas não é considerada uma boa pergunta específica para este site, portanto, não a use como evidência de que você pode fazer perguntas semelhantes aqui.
Sempre existem recursos que seriam úteis em cenários marginais, mas por esse motivo a maioria das pessoas não os conhece. Estou solicitando recursos que normalmente não são ensinados pelos livros didáticos.
Boa pergunta, eu gostaria de poder votar várias vezes!
Gavin Miller
1
Acordado. Eu amo tópicos como este. Há tanta profundidade na estrutura que às vezes você se surpreende com coisas que nunca soube que existiam.
214 Deane
Estou aprendendo muitos truques interessantes com as respostas neste tópico - obrigado! :)
Maxim Zaslavsky
16
Em vez de "Recursos ocultos de ..", essas coisas não devem ser nomeadas "Recursos pouco conhecidos de .." porque quase todas as respostas estão bem documentadas no MSDN ou em outro local, mas não são conhecidas ou usadas com frequência.
Realmente? Eu estava prestes a instalar um servidor SMTP falso, como o Dumbster. Eu escondi jóia.
Eduardo Molteni
2
Alguém sabe se você pode especificar um compartilhamento UNC para o local do diretório?
Mark Sherretta
32
Melhor ainda, coloque isso no seu dev box machine.config, para que você não precise alterar o web.config em todos os aplicativos criados.
Max Toro
Você pode configurá-lo para que ele faça isso apenas no host local? Dessa forma, você não precisa mudar isso toda vez?
Ch122
Não há configuração para isso. Você vai ter de gerir as diferenças de configuração utilizando outros métodos (projetos web de implantação, tarefas de construção, etc.)
John Sheehan
210
Se você colocar um arquivo chamado app_offline.htm
na raiz de um diretório de aplicativo Web, o ASP.NET 2.0+ encerrará o aplicativo e interromperá o processamento normal de novas solicitações de entrada para esse aplicativo, mostrando apenas o conteúdo do app_offline.htm arquivo para todos os novos pedidos .
Essa é a maneira mais rápida e fácil de exibir o aviso "Site temporariamente indisponível" enquanto reimplanta (ou reverte) alterações em um servidor de produção.
Além disso, conforme indicado pela marxidad , verifique se você possui pelo menos 512 bytes de conteúdo no arquivo para que o IE6 o processe corretamente.
Ai! Tenha cuidado ao usar isso com o MOSS 2007. Ele funcionará apenas para páginas que foram acessadas desde a última reinicialização do IIS. Então, se você adicionar esta página à sua raiz virtual wss, em seguida, tentar abrir uma página que não foram acessados anteriormente, você receberá um 404.
Marc
1
@ Marc - Recebi esta dica de Scott Guthrie, se você estiver se sentindo generoso, ajudaria muitos desenvolvedores do SharePoint a evitar esse cenário se comentasse o artigo do Gu: weblogs.asp.net/scottgu/archive/2005/10/ 06 / 426755.aspx
Troy DeMonbreun
Além disso, isso também acionará uma reciclagem do Domínio do Aplicativo e fechará todas as conexões de banco de dados abertas, depois que todas as solicitações forem concluídas.
Bart Verkoeijen
Há uma ressalva: o IIS retorna o conteúdo app_offline.htm com um código de status HTTP 404. Se um mecanismo de pesquisa vagar e tentar indexar seu site enquanto estiver nesse modo offline, talvez você não aprecie os resultados. Mas funciona muito bem para meu aplicativo Web corporativo particular!
Alguns desenvolvedores podem argumentar que é melhor encerrar as coisas manualmente no HttpContext.Response, em vez de lançar uma exceção que é uma operação bastante cara nos livros do .NET.
1189868 #
Não é esta má forma? Você está mostrando o erro 404, enquanto deseja exibir um erro / exceção.
1013 Donnie Thomas
1
Um caso em que consigo pensar é que se alguém está mexendo maliciosamente com parâmetros e coloca algo inválido, você provavelmente quer um 404 genérico, não um erro específico.
John Sheehan
3
Votado apenas porque agora estou ciente do site .NET Tip of the Day.
Kon
ele só funciona quando você joga-lo em httpModule ou httpHandler
Khaled Musaied
75
Aqui está o melhor. Adicione isso ao seu web.config para uma compilação MUITO mais rápida. Isto é pós 3.5SP1 através deste QFE .
<compilationoptimizeCompilations="true">
Resumo rápido: estamos introduzindo uma nova opção optimizeCompilations no ASP.NET que pode melhorar bastante a velocidade de compilação em alguns cenários. Existem algumas capturas, então continue lendo para mais detalhes. Essa opção está atualmente disponível como QFE para 3.5SP1 e fará parte do VS 2010.
O sistema de compilação do ASP.NET adota uma abordagem muito conservadora, o que faz com que ele elimine qualquer trabalho anterior realizado sempre que um arquivo de 'nível superior' for alterado. Os arquivos de 'nível superior' incluem qualquer coisa no bin e App_Code, além de global.asax. Embora isso funcione bem para aplicativos pequenos, torna-se quase inutilizável para aplicativos muito grandes. Por exemplo, um cliente estava encontrando um caso em que demorava 10 minutos para atualizar uma página depois de fazer qualquer alteração em uma montagem de 'compartimento'.
Para aliviar a dor, adicionamos um modo de compilação "otimizado", que adota uma abordagem muito menos conservadora da recompilação.
Isso está "ativado por padrão" no VS 2010 ou ainda devo testá-lo?
M4N
73
HttpContext.Current sempre lhe dará acesso à Solicitação / Resposta / etc. Do contexto atual, mesmo quando você não tiver acesso às propriedades da Página (por exemplo, de uma classe auxiliar fracamente acoplada).
Você pode continuar executando o código na mesma página após redirecionar o usuário para outro chamando Response.Redirect ( url , false )
Você não precisa de arquivos .ASPX se tudo o que você deseja é uma página compilada (ou qualquer IHttpHandler ). Basta definir o caminho e os métodos HTTP para apontar para a classe no <httpHandlers>elemento no arquivo web.config.
Um objeto Page pode ser recuperado de um arquivo .ASPX programaticamente chamando PageParser.GetCompiledPageInstance (virtualPath, aspxFileName, Context)
Sobre Response.Redirect (url, false) - Isso é tanto o que eu esperava por muito tempo .. Eu não sei como eu perdi isso, mas thanxxx
Subliminal Hash
1
Alguém pode explicar o que você faria com isso? Eu sei que tem algum valor, mas eu não consigo descobrir o porquê ...
Deane
5
Se você deseja redirecionar o usuário para um endereço diferente, mas ainda tem algum processamento de back-end (por exemplo, uma solicitação de geração de relatório que redireciona para a página de status de geração do relatório enquanto continua a gerar o relatório em segundo plano)
Mark Cidade
Alguém pode explicar uma situação útil para PageParser.GetCompiledPageInstance (..)? Os documentos dizem que é para uso da infraestrutura - ele retorna um tipo IHttpHandler para que eu não veja como ele pode ser usado na prática.
John K
@jdk: Eu o usei no passado ao substituir o manipulador padrão para solicitações * .aspx, para que eu possa usar objetos IHttpHandler dinâmicos na memória, mas também use GetCompiledPageInstance () para arquivos físicos * .aspx.
Substitui as configurações web.config para forçar a depuração para false, ativa erros personalizados e desativa o rastreamento. Não é mais necessário mudar os atributos antes da publicação - basta deixá-los todos configurados para ambientes de desenvolvimento ou teste e atualizar a configuração de varejo de produção.
Às vezes, esqueço de alterar a depuração da compilação para false antes da publicação, o que afeta negativamente o desempenho. Não há mais problema!
Roy Tinker
59
Ativando intellisense para MasterPages nas páginas de conteúdo
Tenho certeza de que este é um hack muito pouco conhecido
Na maioria das vezes, você precisa usar o método findcontrol e converter os controles na página mestre das páginas de conteúdo quando quiser usá-las, o MasterType diretiva permitirá o intellisense no visual studio assim que você fizer isso.
Pessoalmente, acho que o recurso deve ser deixado desconhecido para as pessoas, ele acopla a página à página principal. Se você acabar usando as propriedades / métodos da página principal e, em seguida, alterá-la, você terá um pesadelo de manutenção.
Phill
@ Phil: Às vezes é necessário e ter um acesso estaticamente digitado a uma masterpage é muito melhor do que a abordagem FindControl. Pelo menos você recebe a mensagem do compilador e pode corrigi-la rapidamente.
Durden81
58
HttpContext.Items como uma ferramenta de cache no nível de solicitação
Esse também seria o meu ponto, eu uso isso em controles aninhados para passar / receber informações de nível de solicitação. Também usei isso no MVC para armazenar uma lista de arquivos js a serem anexados, com base em visualizações parciais.
Tracker1
1
Eu uso isso quando uso o roteamento asp.net para passar os parâmetros buscados dos URLs para minhas páginas. (não com MVC), ótimo para reescrever URLs e é bastante flexível.
Alexandre Brisebois
Hmmmm, pensei em algum lugar onde eu poderia ter usado isso em vez de Session - ta!
Mike Kingscott
52
Duas coisas se destacam na minha cabeça:
1) Você pode ativar e desativar o Trace no código:
Eu teria votado nisso, mas ficou sem votos. Vou tentar me lembrar de voltar para votar. Eu não sabia que poderíamos ter o mesmo arquivo do Code Behind para várias páginas. Não tenho certeza, como isso funcionaria.
Vaibhav
5
Alguém mais acha que é um risco de segurança permitir que você ative um rastreamento a partir de um URL? (# 1) Não vou rebaixar esta questão, mas é importante entender o risco lá.
Kevin Goff
5
Absolutelly, você deve realmente colocar esse código em um DEBUG #ifdef #endif bloco
Radu094
Ótimos comentários, apontando o aspecto de segurança.
Vaibhav
2
Por que é um risco de segurança ativar um rastreamento a partir do URL? Como pode ser usado para me prejudicar?
Kamarey
48
Você pode usar:
Request.Params[Control.UniqueId]
Para obter o valor de um controle ANTES do viewstate ser inicializado (Control.Text etc estará vazio neste momento).
A inicialização do Viewstate não trata com Request.Params. Use-o ANTES de criar o método LoadPostData do controle implementado IPostBackDataHandler.
chapluck
46
WebMethods.
Você pode usar retornos de chamada do ASP.NET AJAX para métodos da Web colocados em páginas ASPX. Você pode decorar um método estático com os atributos [WebMethod ()] e [ScriptMethod ()]. Por exemplo:
O mapeamento de tags permite que você troque controles compatíveis em tempo de compilação em todas as páginas do seu aplicativo da web. Um exemplo útil é se você possui um controle ASP.NET padrão, como um DropDownList, e deseja substituí-lo por um controle personalizado derivado do DropDownList. Pode ser um controle personalizado para fornecer armazenamento em cache mais otimizado dos dados de pesquisa. Em vez de editar todos os formulários da Web e substituir as DropDownLists incorporadas por sua versão personalizada, você pode fazer com que o ASP.NET efetue isso modificando o web.config:
Isso seria muito confuso para outros desenvolvedores da sua equipe
Aykut Akıncı
1
@ Aykut - De fato, poderia ser, e é por isso que afirmo que sua utilidade é bastante estreita, no entanto, quando necessário, é muito útil. Além disso, eu garantiria que qualquer uso do Mapeamento de tags fosse documentado com muita clareza para evitar confusão e ambiguidade.
CraigTP
43
HttpModules . A arquitetura é louca e elegante. Talvez não seja um recurso oculto, mas interessante mesmo assim.
HttpModules é algo avançado, mas eu não chamaria isso de raro ou menos usado (ou me chamaria de ingênuo). Mas sim, eu amo a arquitetura.
Vaibhav
+1 porque muitos desenvolvedores experientes podem conhecer os HttpModules, mas não entendem completamente sua relação com as solicitações. (O mesmo acontece com o HttpHandlers)
John Bubriski
34
Você pode usar Comentários do ASP.NET em uma página .aspx para comentar partes completas de uma página, incluindo controles de servidor. E o conteúdo comentado nunca será enviado ao cliente.
A verdadeira beleza do construtor de expressões de código é que você pode usar a ligação de dados como expressões em situações que não são de ligação de dados. Você também pode criar outros Construtores de Expressões que executam outras funções.
+1, muito legal característica ... Isso é realmente muito semelhante à extensões de marcação do WPF
Thomas Levesque
não é o mesmo que usar <%= /*code*/ %>?
Bevacqua
33
Uso do tipo de arquivo ASHX:
se você deseja apenas alguns html ou xml básicos sem passar pelos manipuladores de eventos da página, poderá implementar o HttpModule de uma maneira simples
Nomeie a página como SomeHandlerPage.ashx e apenas coloque o código abaixo (apenas uma linha) nela
Vale a pena notar que você deve adicionar IRequiresSessionState ou IReadOnlySessionState se precisar, caso contrário, ele não estará lá.
Tracker1 23/05/09
3
Também é importante notar que você pode especificar a configuração do manipulador no web.config para não precisar de um arquivo ashx físico. Ou você pode registrar o manipulador programaticamente no início do seu aplicativo no asax global.
Eu trabalhei em um aplicativo asp.net que passou por uma auditoria de segurança por uma empresa líder em segurança e aprendi esse truque fácil para evitar uma vulnerabilidade de segurança menos conhecida, mas importante.
Considere usar o Page.ViewStateUserKey para combater ataques de um clique. Se você autenticar seus chamadores e usar o ViewState, defina a propriedade Page.ViewStateUserKey no manipulador de eventos Page_Init para impedir ataques com um clique.
Defina a propriedade com um valor que você sabe que é exclusivo para cada usuário, como um ID de sessão, nome de usuário ou identificador de usuário.
Um ataque com um clique ocorre quando um invasor cria uma página da Web (.htm ou .aspx) que contém um campo de formulário oculto chamado __VIEWSTATE que já está preenchido com os dados do ViewState. O ViewState pode ser gerado a partir de uma página criada anteriormente pelo invasor, como uma página de carrinho de compras com 100 itens. O invasor atrai um usuário desavisado para navegar até a página e, em seguida, o invasor faz com que a página seja enviada ao servidor em que o ViewState é válido. O servidor não tem como saber que o ViewState se originou do invasor. A validação do ViewState e os HMACs não contrariam esse ataque porque o ViewState é válido e a página é executada no contexto de segurança do usuário.
Ao definir a propriedade ViewStateUserKey, quando o invasor navega para uma página para criar o ViewState, a propriedade é inicializada com seu nome. Quando o usuário legítimo envia a página ao servidor, ela é inicializada com o nome do invasor. Como resultado, a verificação do ViewState HMAC falha e uma exceção é gerada.
Lembre-se também de deixar base.OnInit (e); para que a função Page_Init () faça seu trabalho.
Druid
Eu acho que esse truque pode falhar se um usuário real não aceitar cookies ou se o sessionid tiver tempo limite.
Aristos #
1
Você não precisa base.OnInit(e);se estiver usando AutoEventWireup="true"a página.
Adam Nofsinger
1
Druida: Ele não está substituindo OnInit (nesse caso, base.OnInit (e) seria necessário).
crdx
O uso do ID da sessão para o ViewStateUserKey só funciona após o início de uma sessão. Isso também significa que essas páginas podem expirar após o término da sessão. Nos casos em que esses problemas são preocupantes, considere usar algo mais durável, como o endereço IP do usuário.
Isso é ótimo para determinar quais scripts serão exibidos (versões mínimas ou completas) ou qualquer outra coisa que você possa querer no dev, mas não ao vivo.
Usando configSource para dividir arquivos de configuração.
Você pode usar o atributo configSource em um arquivo web.config para enviar elementos de configuração para outros arquivos .config, por exemplo, em vez de:
<appSettings><addkey="webServiceURL"value="https://some/ws.url"/><!-- some more keys --></appSettings>
... você pode ter toda a seção appSettings armazenada em outro arquivo de configuração. Aqui está o novo web.config:
<appSettingsconfigSource="myAppSettings.config"/>
O myAppSettings.configarquivo:
<appSettings><addkey="webServiceURL"value="https://some/ws.url"/><!-- some more keys --></appSettings>
Isso é bastante útil para cenários em que você implanta um aplicativo em um cliente e não deseja que ele interfira no próprio arquivo web.config e apenas deseja que eles possam alterar apenas algumas configurações.
Por padrão, qualquer conteúdo entre as tags para um controle personalizado é adicionado como um controle filho. Isso pode ser interceptado em uma substituição AddParsedSubObject () para filtragem ou análise adicional (por exemplo, do conteúdo de texto em LiteralControls):
Se você tiver o ASP.NET gerando um feed RSS, ele às vezes colocará uma linha extra na parte superior da página. Isso não será validado com validadores comuns de RSS. Você pode contornar isso colocando a diretiva de página <@Page>na parte inferior da página.
Você não faria melhor usando um manipulador .ASHX para gerar feeds RSS?
21119 Dan Diplo
Eu acho que isso depende da complexidade do projeto. Nem todo mundo tem a capacidade ou habilidades para criar e compilar manipuladores. Na página asp.net funciona razoavelmente bem para isso
Kevin Goff
1
E você pode usar algo como <asp: Repeater> para gerar itens RSS e fazer outros truques (como usando o LoginView para remover alguns itens) que é muito melhor do que escrever seqüências de ASHX IMO
chakrit
LinqToXml + ASHX é o caminho a seguir!
Carlos Muñoz
Isso é útil para muito mais que a geração de feeds RSS. IIRC, o HTML5 deve ter a tag <! Doctype html> na primeira linha na parte superior para validar corretamente.
Roy Tinker
12
Antes que o ASP.NET v3.5 adicionasse rotas, você poderia criar seus próprios URLs amigáveis simplesmente escrevendo um HTTPModule e reescrevendo a solicitação no início do pipeline da página (como o evento BeginRequest).
O DotNetNuke tem um HttpModule realmente bom que faz isso por seus URLs amigáveis. Ainda é útil para máquinas nas quais você não pode implantar o .NET v3.5.
Respostas:
Durante o teste, você pode enviar e-mails para uma pasta no seu computador em vez de para um servidor SMTP. Coloque isso no seu web.config:
fonte
Se você colocar um arquivo chamado app_offline.htm na raiz de um diretório de aplicativo Web, o ASP.NET 2.0+ encerrará o aplicativo e interromperá o processamento normal de novas solicitações de entrada para esse aplicativo, mostrando apenas o conteúdo do app_offline.htm arquivo para todos os novos pedidos .
Essa é a maneira mais rápida e fácil de exibir o aviso "Site temporariamente indisponível" enquanto reimplanta (ou reverte) alterações em um servidor de produção.
Além disso, conforme indicado pela marxidad , verifique se você possui pelo menos 512 bytes de conteúdo no arquivo para que o IE6 o processe corretamente.
fonte
Isso será detectado pelo ASP.NET, que retornará a página customErrors. Aprendi sobre este em uma dica recente do .NET Tip of the Day
fonte
Aqui está o melhor. Adicione isso ao seu web.config para uma compilação MUITO mais rápida. Isto é pós 3.5SP1 através deste QFE .
Via aqui :
fonte
HttpContext.Current sempre lhe dará acesso à Solicitação / Resposta / etc. Do contexto atual, mesmo quando você não tiver acesso às propriedades da Página (por exemplo, de uma classe auxiliar fracamente acoplada).
Você pode continuar executando o código na mesma página após redirecionar o usuário para outro chamando Response.Redirect ( url , false )
Você não precisa de arquivos .ASPX se tudo o que você deseja é uma página compilada (ou qualquer IHttpHandler ). Basta definir o caminho e os métodos HTTP para apontar para a classe no
<httpHandlers>
elemento no arquivo web.config.Um objeto Page pode ser recuperado de um arquivo .ASPX programaticamente chamando PageParser.GetCompiledPageInstance (virtualPath, aspxFileName, Context)
fonte
Modo de varejo no nível machine.config:
Substitui as configurações web.config para forçar a depuração para false, ativa erros personalizados e desativa o rastreamento. Não é mais necessário mudar os atributos antes da publicação - basta deixá-los todos configurados para ambientes de desenvolvimento ou teste e atualizar a configuração de varejo de produção.
fonte
Ativando intellisense para MasterPages nas páginas de conteúdo
Tenho certeza de que este é um hack muito pouco conhecido
Na maioria das vezes, você precisa usar o método findcontrol e converter os controles na página mestre das páginas de conteúdo quando quiser usá-las, o MasterType diretiva permitirá o intellisense no visual studio assim que você fizer isso.
basta adicionar mais uma diretiva à página
Se você não quiser usar o Caminho Virtual e, em vez disso, usar o nome da classe,
Veja o artigo completo aqui
fonte
HttpContext.Items como uma ferramenta de cache no nível de solicitação
fonte
Duas coisas se destacam na minha cabeça:
1) Você pode ativar e desativar o Trace no código:
2) Você pode criar várias páginas .aspx usando apenas um arquivo "code-behind" compartilhado.
Crie um arquivo .cs de classe:
e, em seguida, você pode ter qualquer número de páginas .aspx (depois de excluir o código .designer.cs e .cs por trás do código gerado pelo VS):
Você pode ter controles no ASPX que não aparecem na Classe1 e vice-versa, mas é necessário lembrar-se de verificar se há nulos nos seus controles.
fonte
Você pode usar:
Para obter o valor de um controle ANTES do viewstate ser inicializado (Control.Text etc estará vazio neste momento).
Isso é útil para o código no Init.
fonte
WebMethods.
Você pode usar retornos de chamada do ASP.NET AJAX para métodos da Web colocados em páginas ASPX. Você pode decorar um método estático com os atributos [WebMethod ()] e [ScriptMethod ()]. Por exemplo:
Agora, na sua página ASPX, você pode fazer isso:
E chame seu método do lado do servidor via JavaScript usando:
fonte
Verifique se o cliente ainda está conectado, antes de iniciar uma tarefa de longa execução:
fonte
Um recurso pouco conhecido e raramente usado do ASP.NET é:
Mapeamento de tags
Raramente é usado porque há apenas uma situação específica em que você precisa, mas quando precisa, é muito útil.
Alguns artigos sobre esse recurso pouco conhecido:
Mapeamento de tags no ASP.NET
usando o mapeamento de tags no ASP.NET 2.0
e desse último artigo:
fonte
HttpModules . A arquitetura é louca e elegante. Talvez não seja um recurso oculto, mas interessante mesmo assim.
fonte
Você pode usar Comentários do ASP.NET em uma página .aspx para comentar partes completas de uma página, incluindo controles de servidor. E o conteúdo comentado nunca será enviado ao cliente.
fonte
O construtor de expressões de código
Exemplo de marcação:
A verdadeira beleza do construtor de expressões de código é que você pode usar a ligação de dados como expressões em situações que não são de ligação de dados. Você também pode criar outros Construtores de Expressões que executam outras funções.
web.config:
A classe cs que faz tudo acontecer:
fonte
<%= /*code*/ %>
?Uso do tipo de arquivo ASHX:
se você deseja apenas alguns html ou xml básicos sem passar pelos manipuladores de eventos da página, poderá implementar o HttpModule de uma maneira simples
Nomeie a página como SomeHandlerPage.ashx e apenas coloque o código abaixo (apenas uma linha) nela
Então o arquivo de código
fonte
Definindo propriedades de controle do servidor com base no navegador de destino e muito mais .
Aquele meio que me pegou de surpresa.
fonte
System.Web.VirtualPathUtility
fonte
Eu trabalhei em um aplicativo asp.net que passou por uma auditoria de segurança por uma empresa líder em segurança e aprendi esse truque fácil para evitar uma vulnerabilidade de segurança menos conhecida, mas importante.
A explicação abaixo é de: http://www.guidanceshare.com/wiki/ASP.NET_2.0_Security_Guidelines_-_Parameter_Manipulation#Consider_Using_Page.ViewStateUserKey_to_Counter_One-Click_Attacks
Considere usar o Page.ViewStateUserKey para combater ataques de um clique. Se você autenticar seus chamadores e usar o ViewState, defina a propriedade Page.ViewStateUserKey no manipulador de eventos Page_Init para impedir ataques com um clique.
Defina a propriedade com um valor que você sabe que é exclusivo para cada usuário, como um ID de sessão, nome de usuário ou identificador de usuário.
Um ataque com um clique ocorre quando um invasor cria uma página da Web (.htm ou .aspx) que contém um campo de formulário oculto chamado __VIEWSTATE que já está preenchido com os dados do ViewState. O ViewState pode ser gerado a partir de uma página criada anteriormente pelo invasor, como uma página de carrinho de compras com 100 itens. O invasor atrai um usuário desavisado para navegar até a página e, em seguida, o invasor faz com que a página seja enviada ao servidor em que o ViewState é válido. O servidor não tem como saber que o ViewState se originou do invasor. A validação do ViewState e os HMACs não contrariam esse ataque porque o ViewState é válido e a página é executada no contexto de segurança do usuário.
Ao definir a propriedade ViewStateUserKey, quando o invasor navega para uma página para criar o ViewState, a propriedade é inicializada com seu nome. Quando o usuário legítimo envia a página ao servidor, ela é inicializada com o nome do invasor. Como resultado, a verificação do ViewState HMAC falha e uma exceção é gerada.
fonte
base.OnInit(e);
se estiver usandoAutoEventWireup="true"
a página.HttpContext.Current.IsDebuggingEnabled
Isso é ótimo para determinar quais scripts serão exibidos (versões mínimas ou completas) ou qualquer outra coisa que você possa querer no dev, mas não ao vivo.
fonte
Incluído no ASP.NET 3.5 SP1:
fonte
Propriedade DefaultButton nos painéis.
Ele define o botão padrão para um painel específico.
fonte
O ScottGu tem vários truques em http://weblogs.asp.net/scottgu/archive/2006/04/03/441787.aspx
fonte
Usando configSource para dividir arquivos de configuração.
Você pode usar o atributo configSource em um arquivo web.config para enviar elementos de configuração para outros arquivos .config, por exemplo, em vez de:
... você pode ter toda a seção appSettings armazenada em outro arquivo de configuração. Aqui está o novo
web.config
:O
myAppSettings.config
arquivo:Isso é bastante útil para cenários em que você implanta um aplicativo em um cliente e não deseja que ele interfira no próprio arquivo web.config e apenas deseja que eles possam alterar apenas algumas configurações.
ref: http://weblogs.asp.net/fmarguerie/archive/2007/04/26/using-configsource-to-split-configuration-files.aspx
fonte
Atributo MaintainScrollPositionOnPostback na diretiva Page. É usado para manter a posição de rolagem da página aspx entre as postagens.
fonte
HttpContext.IsCustomErrorEnabled é um recurso interessante. Eu achei útil mais de uma vez. Aqui está um pequeno post sobre isso.
fonte
Por padrão, qualquer conteúdo entre as tags para um controle personalizado é adicionado como um controle filho. Isso pode ser interceptado em uma substituição AddParsedSubObject () para filtragem ou análise adicional (por exemplo, do conteúdo de texto em LiteralControls):
...
fonte
Se você tiver o ASP.NET gerando um feed RSS, ele às vezes colocará uma linha extra na parte superior da página. Isso não será validado com validadores comuns de RSS. Você pode contornar isso colocando a diretiva de página
<@Page>
na parte inferior da página.fonte
Antes que o ASP.NET v3.5 adicionasse rotas, você poderia criar seus próprios URLs amigáveis simplesmente escrevendo um HTTPModule e reescrevendo a solicitação no início do pipeline da página (como o evento BeginRequest).
URLs como http: // nome_do_servidor / página / Param1 / SomeParams1 / Param2 / SomeParams2 seriam mapeados para outra página como abaixo (geralmente usando expressões regulares).
O DotNetNuke tem um HttpModule realmente bom que faz isso por seus URLs amigáveis. Ainda é útil para máquinas nas quais você não pode implantar o .NET v3.5.
fonte