Esta pregunta existe porque tiene un significado histórico, pero no se considera una buena pregunta sobre el tema para este sitio, así que no la use como evidencia de que puede hacer preguntas similares aquí.
Siempre hay características que serían útiles en escenarios marginales, pero por esa misma razón la mayoría de la gente no las conoce. Estoy pidiendo características que normalmente no se enseñan en los libros de texto.
Buena pregunta, ¡ojalá pudiera votar varias veces!
Gavin Miller
1
Convenido. Me encanta hilos como este. Hay tanta profundidad en el marco que a veces te sorprenden cosas que nunca supiste que estaban allí.
Deane
Estoy aprendiendo muchos trucos nuevos y geniales de las respuestas en este hilo, ¡gracias! :)
Maxim Zaslavsky
16
En lugar de "Características ocultas de ...", ¿no deberían estas cosas llamarse "Características poco conocidas de ..." porque la mayoría de las respuestas están bien documentadas en MSDN o en otros lugares, simplemente no se conocen o usan comúnmente.
De Verdad? Estaba a punto de instalar un servidor SMTP falso, como Dumbster. Yo escondí gema.
Eduardo Molteni
2
¿Alguien sabe si puede especificar un recurso compartido UNC para la ubicación del directorio?
Mark Sherretta
32
Mejor aún, ponga esto en su caja de desarrollo machine.config, para que no tenga que cambiar el web.config en cada aplicación que cree.
Max Toro
¿Puedes configurarlo para que solo haga esto en el host local? De esa manera no tienes que cambiarlo todo el tiempo?
chobo2
No hay escenario para eso. Tendrá que gestionar las diferencias de configuración utilizando otros métodos (proyectos de implementación web, tareas de compilación, etc.)
John Sheehan
210
Si coloca un archivo llamado app_offline.htm
en la raíz de un directorio de aplicaciones web, ASP.NET 2.0+ cerrará la aplicación y detendrá el procesamiento normal de cualquier nueva solicitud entrante para esa aplicación, mostrando solo el contenido de app_offline.htm archivo para todas las nuevas solicitudes .
Esta es la forma más rápida y fácil de mostrar su aviso de "Sitio temporalmente no disponible" al volver a implementar (o revertir) los cambios en un servidor de producción.
Además, como lo señala marxidad , asegúrese de tener al menos 512 bytes de contenido dentro del archivo para que IE6 lo represente correctamente.
¡Ay! Tenga cuidado al usar esto con MOSS 2007. Solo funcionará para páginas a las que se haya accedido desde el último reinicio de IIS. Entonces, si agrega esta página a su raíz virtual wss, intente abrir una página a la que no se haya accedido anteriormente, obtendrá un 404.
Marc
1
@Marc - Recibí este consejo de Scott Guthrie, si te sientes generoso, estarías ayudando a muchos desarrolladores de SharePoint a evitar este escenario si comentaras el artículo del Gu: weblogs.asp.net/scottgu/archive/2005/10/ 06 / 426755.aspx
Troy DeMonbreun
Además, esto también activará un reciclaje del dominio de la aplicación y cerrará cualquier conexión de base de datos abierta, una vez que todas las solicitudes hayan finalizado.
Bart Verkoeijen
Hay una advertencia sobre esto: IIS devuelve el contenido app_offline.htm con un código de estado HTTP de 404. Si un motor de búsqueda deambula e intenta indexar su sitio mientras está en este modo fuera de línea, es posible que no aprecie los resultados. ¡Pero funciona muy bien para mi aplicación web corporativa privada!
Algunos desarrolladores podrían argumentar que es mejor concluir las cosas manualmente en HttpContext.Response en lugar de lanzar una excepción que es una operación bastante costosa en los libros .NET.
lubos hasko
¿No es esta mala forma? Está mostrando el error 404, mientras que desea mostrar un error / excepción.
Donnie Thomas el
1
Un caso en el que puedo pensar es que si alguien está jugando mal con los parámetros y pone algo inválido, probablemente desee un 404 genérico, no un error específico.
John Sheehan el
3
Voté únicamente porque ahora conozco el sitio .NET Tip of the Day.
Kon
funciona solo cuando lo lanzas en httpModule o httpHandler
Khaled Musaied
75
Aquí está el mejor. Agregue esto a su web.config para una compilación MUCHO más rápida. Esta es la publicación 3.5SP1 a través de este QFE .
<compilationoptimizeCompilations="true">
Resumen rápido: estamos presentando un nuevo conmutador de OptimizeCompilations en ASP.NET que puede mejorar en gran medida la velocidad de compilación en algunos escenarios. Hay algunas capturas, así que sigue leyendo para obtener más detalles. Actualmente, este conmutador está disponible como QFE para 3.5SP1 y formará parte de VS 2010.
El sistema de compilación ASP.NET adopta un enfoque muy conservador que hace que elimine cualquier trabajo previo que haya realizado cada vez que cambia un archivo de "nivel superior". Los archivos de "nivel superior" incluyen cualquier cosa en bin y App_Code, así como global.asax. Si bien esto funciona bien para aplicaciones pequeñas, se vuelve casi inutilizable para aplicaciones muy grandes. Por ejemplo, un cliente se encontraba con un caso en el que tardaba 10 minutos en actualizar una página después de realizar cualquier cambio en un ensamblaje 'bin'.
Para aliviar el dolor, agregamos un modo de compilación 'optimizado' que adopta un enfoque mucho menos conservador para la recompilación.
¿Está "activado por defecto" con VS 2010 o aún debería probarlo?
M4N
73
HttpContext.Current siempre le dará acceso a la Solicitud / Respuesta / etc. del contexto actual, incluso cuando no tenga acceso a las propiedades de la Página (por ejemplo, desde una clase auxiliar acoplada libremente).
Puede continuar ejecutando código en la misma página después de redirigir al usuario a otro llamando a Response.Redirect ( url , false )
No necesita archivos .ASPX si todo lo que quiere es una página compilada (o cualquier IHttpHandler ). Simplemente configure la ruta y los métodos HTTP para apuntar a la clase en el <httpHandlers>elemento en el archivo web.config.
Un objeto de página se puede recuperar de un archivo .ASPX mediante programación llamando a PageParser.GetCompiledPageInstance (virtualPath, aspxFileName, Context)
Acerca de Response.Redirect (url, false) - Eso es mucho de lo que esperaba durante mucho tiempo ... No sé cómo me perdí eso, pero graciasxxx
Subliminal Hash el
1
¿Alguien puede explicar qué harías con esto? Sé que tiene algún valor, pero no puedo entender por qué ...
Deane
55
Si desea redirigir al usuario a una dirección diferente pero aún tiene que realizar un procesamiento de fondo (por ejemplo, una solicitud de generación de informes que redirige a la página de estado de generación del informe mientras continúa generando el informe en segundo plano)
Mark Cidade
¿Alguien puede explicar una situación útil para PageParser.GetCompiledPageInstance (..)? Los documentos dicen que es para uso de infraestructura: devuelve un tipo IHttpHandler, por lo que no veo cómo se puede usar prácticamente.
John K
@jdk: Lo he usado en el pasado al anular el controlador predeterminado para las solicitudes * .aspx para poder usar objetos IHttpHandler dinámicos en memoria pero también usar GetCompiledPageInstance () para archivos físicos * .aspx.
Anula la configuración de web.config para aplicar la depuración a falso, activa los errores personalizados y deshabilita el seguimiento. Ya no se olvide de cambiar los atributos antes de publicar, simplemente déjelos configurados para entornos de desarrollo o prueba y actualice la configuración de venta minorista de producción.
A veces olvido cambiar la depuración de compilación a falsa antes de publicar, lo que afecta negativamente el rendimiento. ¡Ya no hay problema!
Roy Tinker
59
Habilitación de intellisense para MasterPages en las páginas de contenido
Estoy seguro de que este es un truco muy poco conocido
La mayoría de las veces tiene que usar el método findcontrol y emitir los controles en la página maestra desde las páginas de contenido cuando desea usarlos, el MasterType directiva habilitará intellisense en Visual Studio una vez que lo haga.
Personalmente, creo que la característica debe dejarse desconocida para las personas, ya que combina la página con la página maestra. Si termina utilizando las propiedades / métodos de la página maestra y luego cambia la página maestra, termina con una pesadilla de mantenimiento.
Phill
@ Phil: a veces es necesario y tener un acceso estáticamente escrito a una página maestra es mucho mejor que el enfoque FindControl. Al menos obtienes el mensaje del compilador y puedes solucionarlo rápidamente.
Durden81
58
HttpContext.Items como una herramienta de almacenamiento en caché a nivel de solicitud
Este sería mi punto también, lo uso en controles anidados para pasar / recibir información de nivel de solicitud. También uso esto en MVC para almacenar una lista de archivos js para agregar, basada en vistas parciales.
Rastreador1
1
Lo uso cuando uso el enrutamiento asp.net para pasar los parámetros obtenidos de las URL a mis páginas. (no con MVC) ideal para la reescritura de URL y es bastante flexible.
Alexandre Brisebois
Hmmmm, solo pensé en algún lugar donde podría haber usado esto en lugar de Session - ta!
Mike Kingscott
52
Dos cosas se destacan en mi cabeza:
1) Puede activar y desactivar Trace desde el código:
Puede tener controles en el ASPX que no aparezcan en la Clase 1 y viceversa, pero debe recordar para verificar que los controles no tengan valores nulos.
Hubiera votado esto, pero me quedé sin votos. Voy a tratar de recordar volver a votar esto. No sabía que podríamos tener el mismo archivo de código subyacente para varias páginas. No estoy seguro, cómo funcionaría eso.
Vaibhav
55
¿Alguien más piensa que es un riesgo de seguridad permitirle activar un rastreo desde una URL? (# 1) No voy a rechazar esta pregunta, pero es importante entender el riesgo allí.
Kevin Goff
55
Absolutamente, realmente deberías poner ese código en un bloque #ifdef DEBUG #endif
Radu094
Grandes comentarios, señalando el aspecto de seguridad.
Vaibhav
2
¿Por qué es un riesgo de seguridad activar un rastreo desde la URL? ¿Cómo se puede usar para hacerme daño?
Kamarey
48
Puedes usar:
Request.Params[Control.UniqueId]
Para obtener el valor de un control ANTES de que se inicialice viewstate (Control.Text, etc. estará vacío en este punto).
La inicialización de Viewstate no se trata con Request.Params. Úselo ANTES de generar el método LoadPostData de control implementado IPostBackDataHandler.
chapluck
46
WebMethods.
Puede usar las devoluciones de llamada ASP.NET AJAX a métodos web ubicados en páginas ASPX. Puede decorar un método estático con los atributos [WebMethod ()] y [ScriptMethod ()]. Por ejemplo:
El mapeo de etiquetas le permite intercambiar controles compatibles en tiempo de compilación en cada página de su aplicación web. Un ejemplo útil es si tiene un control ASP.NET estándar, como DropDownList, y desea reemplazarlo con un control personalizado derivado de DropDownList. Este podría ser un control que se ha personalizado para proporcionar un almacenamiento en caché más optimizado de los datos de búsqueda. En lugar de editar cada formulario web y reemplazar las DropDownLists integradas con su versión personalizada, puede hacer que ASP.NET lo haga por usted modificando web.config:
Esto sería muy confuso para otros desarrolladores en su equipo
Aykut Akıncı
1
@Aykut: De hecho, podría serlo, por eso afirmo que su utilidad es bastante limitada, sin embargo, cuando es necesario, es muy útil. Además, me aseguraría de que cualquier uso de la asignación de etiquetas se documentara muy claramente para evitar confusiones y ambigüedades.
CraigTP
43
HttpModules . La arquitectura es locamente elegante. Tal vez no sea una característica oculta, pero no obstante genial.
HttpModules es algo avanzado, pero no lo llamaría raro o menos usado (o me llamaría ingenuo). Pero sí, me encanta la arquitectura.
Vaibhav
+1 porque muchos desarrolladores experimentados pueden conocer HttpModules pero no entienden completamente su relación con las solicitudes. (Lo mismo con HttpHandlers)
John Bubriski
34
Puede usar los comentarios de ASP.NET dentro de una página .aspx para comentar partes completas de una página, incluidos los controles del servidor. Y los contenidos que se comentan nunca se enviarán al cliente.
La verdadera belleza del generador de expresiones de código es que puede usar el enlace de datos como expresiones en situaciones sin enlace de datos. También puede crear otros constructores de expresiones que realicen otras funciones.
+1, característica realmente genial ... Eso es en realidad bastante similar a las extensiones de marcado de WPF
Thomas Levesque
¿No es esto lo mismo que usar <%= /*code*/ %>?
bevacqua
33
Uso del tipo de archivo ASHX:
si solo desea generar algunos html o xml básicos sin pasar por los controladores de eventos de la página, puede implementar el HttpModule de una manera simple
Asigne un nombre a la página como SomeHandlerPage.ashx y simplemente coloque el siguiente código (solo una línea)
Vale la pena señalar que debe agregar IRequiresSessionState o IReadOnlySessionState si lo necesita, de lo contrario no estará allí.
Rastreador1
3
También vale la pena señalar que puede especificar la configuración del controlador en web.config para que no necesite tener un archivo ashx físico. O puede registrar el controlador mediante programación en el inicio de su aplicación en el asax global.
Trabajé en una aplicación asp.net que fue sometida a una auditoría de seguridad por parte de una empresa de seguridad líder y aprendí este sencillo truco para evitar una vulnerabilidad de seguridad menos conocida pero importante.
Considere usar Page.ViewStateUserKey para contrarrestar los ataques de un clic. Si autentica a las personas que llaman y usa ViewState, configure la propiedad Page.ViewStateUserKey en el controlador de eventos Page_Init para evitar ataques con un solo clic.
Establezca la propiedad en un valor que sepa que es único para cada usuario, como un ID de sesión, nombre de usuario o identificador de usuario.
Un ataque de un clic ocurre cuando un atacante crea una página web (.htm o .aspx) que contiene un campo de formulario oculto llamado __VIEWSTATE que ya está lleno de datos ViewState. ViewState se puede generar a partir de una página que el atacante había creado previamente, como una página de carrito de compras con 100 artículos. El atacante atrae a un usuario desprevenido a navegar a la página, y luego el atacante hace que la página se envíe al servidor donde el ViewState es válido. El servidor no tiene forma de saber que ViewState se originó en el atacante. La validación de ViewState y los HMAC no contrarrestan este ataque porque ViewState es válido y la página se ejecuta bajo el contexto de seguridad del usuario.
Al establecer la propiedad ViewStateUserKey, cuando el atacante navega por una página para crear ViewState, la propiedad se inicializa con su nombre. Cuando el usuario legítimo envía la página al servidor, se inicializa con el nombre del atacante. Como resultado, la verificación ViewState HMAC falla y se genera una excepción.
También recuerde dejar base.OnInit (e); para que la función Page_Init () haga su trabajo.
Druida
Creo que este truco puede fallar si un usuario real no acepta las cookies, o si sessionid tiene tiempo de espera.
Aristos
1
No es necesario base.OnInit(e);si está utilizando AutoEventWireup="true"para la página.
Adam Nofsinger
1
Druida: No está anulando OnInit (en cuyo caso, base.OnInit (e) sería necesario).
crdx
El uso de la ID de sesión para ViewStateUserKey solo funciona después de que una sesión realmente ha comenzado. También significa que estas páginas pueden agotar el tiempo de espera una vez que finaliza la sesión. En los casos en que esos problemas sean preocupantes, puede considerar usar algo más duradero, como la dirección IP del usuario.
Usando configSource para dividir archivos de configuración.
Puede usar el atributo configSource en un archivo web.config para enviar elementos de configuración a otros archivos .config, por ejemplo, en lugar de:
<appSettings><addkey="webServiceURL"value="https://some/ws.url"/><!-- some more keys --></appSettings>
... puede tener toda la sección AppSettings almacenada en otro archivo de configuración. Aquí está lo nuevo web.config:
<appSettingsconfigSource="myAppSettings.config"/>
El myAppSettings.configarchivo:
<appSettings><addkey="webServiceURL"value="https://some/ws.url"/><!-- some more keys --></appSettings>
Esto es bastante útil para escenarios en los que despliega una aplicación a un cliente y no desea que interfieran con el archivo web.config en sí y solo quiere que puedan cambiar solo algunas configuraciones.
Esto también está funcionando en cualquier tipo de proyecto .net, ex aplicación de escritorio. configs
Zoltan Veres
17
MaintainScrollPositionOnPostback atributo en la directiva de página. Se utiliza para mantener la posición de desplazamiento de la página aspx en las devoluciones.
De forma predeterminada, cualquier contenido entre etiquetas para un control personalizado se agrega como control secundario. Esto se puede interceptar en una anulación AddParsedSubObject () para filtrar o analizar adicionalmente (por ejemplo, el contenido de texto en LiteralControls):
Si tiene ASP.NET generando una fuente RSS, a veces colocará una línea adicional en la parte superior de la página. Esto no se validará con validadores RSS comunes. Puede solucionarlo colocando la directiva de la página <@Page>en la parte inferior de la página.
¿No sería mejor usar un controlador .ASHX para generar fuentes RSS?
Dan Diplo
Supongo que eso depende de la complejidad del proyecto. No todos tienen la capacidad o las habilidades para crear y compilar controladores. En la página asp.net funciona razonablemente bien para esto
Kevin Goff el
1
Y puede usar algo como <asp: Repeater> para generar elementos RSS y hacer otros trucos (como usar LogInView para eliminar algunos elementos) que es mucho mejor que escribir cadenas desde ASHX IMO
chakrit
¡LinqToXml + ASHX es el camino a seguir!
Carlos Muñoz
Esto es útil para mucho más que la generación de fuentes RSS. IIRC, HTML5 debe tener la etiqueta <! Doctype html> en la primera línea en la parte superior para validar correctamente.
Roy Tinker
12
Antes de que ASP.NET v3.5 agregara rutas, podía crear sus propias URL amigables simplemente escribiendo un HTTPModule y reescribiendo la solicitud al principio de la canalización de la página (como el evento BeginRequest).
DotNetNuke tiene un HttpModule realmente bueno que hace esto por sus URL amigables. Todavía es útil para máquinas donde no puede implementar .NET v3.5.
Respuestas:
Durante la prueba, puede enviar correos electrónicos a una carpeta de su computadora en lugar de a un servidor SMTP. Pon esto en tu web.config:
fuente
Si coloca un archivo llamado app_offline.htm en la raíz de un directorio de aplicaciones web, ASP.NET 2.0+ cerrará la aplicación y detendrá el procesamiento normal de cualquier nueva solicitud entrante para esa aplicación, mostrando solo el contenido de app_offline.htm archivo para todas las nuevas solicitudes .
Esta es la forma más rápida y fácil de mostrar su aviso de "Sitio temporalmente no disponible" al volver a implementar (o revertir) los cambios en un servidor de producción.
Además, como lo señala marxidad , asegúrese de tener al menos 512 bytes de contenido dentro del archivo para que IE6 lo represente correctamente.
fuente
ASP.NET lo detectará y devolverá la página customErrors. Aprendí sobre este en un reciente .NET Consejo del día Post
fuente
Aquí está el mejor. Agregue esto a su web.config para una compilación MUCHO más rápida. Esta es la publicación 3.5SP1 a través de este QFE .
Vía aquí :
fuente
HttpContext.Current siempre le dará acceso a la Solicitud / Respuesta / etc. del contexto actual, incluso cuando no tenga acceso a las propiedades de la Página (por ejemplo, desde una clase auxiliar acoplada libremente).
Puede continuar ejecutando código en la misma página después de redirigir al usuario a otro llamando a Response.Redirect ( url , false )
No necesita archivos .ASPX si todo lo que quiere es una página compilada (o cualquier IHttpHandler ). Simplemente configure la ruta y los métodos HTTP para apuntar a la clase en el
<httpHandlers>
elemento en el archivo web.config.Un objeto de página se puede recuperar de un archivo .ASPX mediante programación llamando a PageParser.GetCompiledPageInstance (virtualPath, aspxFileName, Context)
fuente
Modo comercial en el nivel machine.config:
Anula la configuración de web.config para aplicar la depuración a falso, activa los errores personalizados y deshabilita el seguimiento. Ya no se olvide de cambiar los atributos antes de publicar, simplemente déjelos configurados para entornos de desarrollo o prueba y actualice la configuración de venta minorista de producción.
fuente
Habilitación de intellisense para MasterPages en las páginas de contenido
Estoy seguro de que este es un truco muy poco conocido
La mayoría de las veces tiene que usar el método findcontrol y emitir los controles en la página maestra desde las páginas de contenido cuando desea usarlos, el MasterType directiva habilitará intellisense en Visual Studio una vez que lo haga.
simplemente agregue una directiva más a la página
Si no desea utilizar la Ruta virtual y utilizar el nombre de la clase, entonces
Obtenga el artículo completo aquí
fuente
HttpContext.Items como una herramienta de almacenamiento en caché a nivel de solicitud
fuente
Dos cosas se destacan en mi cabeza:
1) Puede activar y desactivar Trace desde el código:
2) Puede construir múltiples páginas .aspx usando solo un archivo compartido de "código subyacente".
Cree un archivo .cs de clase:
y luego puede tener cualquier cantidad de páginas .aspx (después de eliminar .designer.cs y .cs code-behind que VS ha generado):
Puede tener controles en el ASPX que no aparezcan en la Clase 1 y viceversa, pero debe recordar para verificar que los controles no tengan valores nulos.
fuente
Puedes usar:
Para obtener el valor de un control ANTES de que se inicialice viewstate (Control.Text, etc. estará vacío en este punto).
Esto es útil para el código en Init.
fuente
WebMethods.
Puede usar las devoluciones de llamada ASP.NET AJAX a métodos web ubicados en páginas ASPX. Puede decorar un método estático con los atributos [WebMethod ()] y [ScriptMethod ()]. Por ejemplo:
Ahora, en su página ASPX puede hacer esto:
Y llame a su método del lado del servidor a través de JavaScript usando:
fuente
Verifique si el cliente todavía está conectado, antes de comenzar una tarea de larga duración:
fuente
Una característica poco conocida y poco utilizada de ASP.NET es:
Mapeo de etiquetas
Raramente se usa porque solo hay una situación específica donde la necesitarías, pero cuando la necesitas, es muy útil.
Algunos artículos sobre esta característica poco conocida:
Asignación de etiquetas en ASP.NET
mediante la asignación de etiquetas en ASP.NET 2.0
y de ese último artículo:
fuente
HttpModules . La arquitectura es locamente elegante. Tal vez no sea una característica oculta, pero no obstante genial.
fuente
Puede usar los comentarios de ASP.NET dentro de una página .aspx para comentar partes completas de una página, incluidos los controles del servidor. Y los contenidos que se comentan nunca se enviarán al cliente.
fuente
El generador de expresiones de código
Marcado de muestra:
La verdadera belleza del generador de expresiones de código es que puede usar el enlace de datos como expresiones en situaciones sin enlace de datos. También puede crear otros constructores de expresiones que realicen otras funciones.
web.config:
La clase cs que hace que todo suceda:
fuente
<%= /*code*/ %>
?Uso del tipo de archivo ASHX:
si solo desea generar algunos html o xml básicos sin pasar por los controladores de eventos de la página, puede implementar el HttpModule de una manera simple
Asigne un nombre a la página como SomeHandlerPage.ashx y simplemente coloque el siguiente código (solo una línea)
Luego el archivo de código
fuente
Configuración del Servidor de control propiedades basadas en navegador de destino y más .
Ese me tomó por sorpresa.
fuente
System.Web.VirtualPathUtility
fuente
Trabajé en una aplicación asp.net que fue sometida a una auditoría de seguridad por parte de una empresa de seguridad líder y aprendí este sencillo truco para evitar una vulnerabilidad de seguridad menos conocida pero importante.
La explicación a continuación es 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 Page.ViewStateUserKey para contrarrestar los ataques de un clic. Si autentica a las personas que llaman y usa ViewState, configure la propiedad Page.ViewStateUserKey en el controlador de eventos Page_Init para evitar ataques con un solo clic.
Establezca la propiedad en un valor que sepa que es único para cada usuario, como un ID de sesión, nombre de usuario o identificador de usuario.
Un ataque de un clic ocurre cuando un atacante crea una página web (.htm o .aspx) que contiene un campo de formulario oculto llamado __VIEWSTATE que ya está lleno de datos ViewState. ViewState se puede generar a partir de una página que el atacante había creado previamente, como una página de carrito de compras con 100 artículos. El atacante atrae a un usuario desprevenido a navegar a la página, y luego el atacante hace que la página se envíe al servidor donde el ViewState es válido. El servidor no tiene forma de saber que ViewState se originó en el atacante. La validación de ViewState y los HMAC no contrarrestan este ataque porque ViewState es válido y la página se ejecuta bajo el contexto de seguridad del usuario.
Al establecer la propiedad ViewStateUserKey, cuando el atacante navega por una página para crear ViewState, la propiedad se inicializa con su nombre. Cuando el usuario legítimo envía la página al servidor, se inicializa con el nombre del atacante. Como resultado, la verificación ViewState HMAC falla y se genera una excepción.
fuente
base.OnInit(e);
si está utilizandoAutoEventWireup="true"
para la página.HttpContext.Current.IsDebuggingEnabled
Esto es excelente para determinar qué scripts generar (versiones mínimas o completas) o cualquier otra cosa que desee en dev, pero no en vivo.
fuente
Incluido en ASP.NET 3.5 SP1:
fuente
Propiedad DefaultButton en paneles.
Establece el botón predeterminado para un panel en particular.
fuente
ScottGu tiene un montón de trucos en http://weblogs.asp.net/scottgu/archive/2006/04/03/441787.aspx
fuente
Usando configSource para dividir archivos de configuración.
Puede usar el atributo configSource en un archivo web.config para enviar elementos de configuración a otros archivos .config, por ejemplo, en lugar de:
... puede tener toda la sección AppSettings almacenada en otro archivo de configuración. Aquí está lo nuevo
web.config
:El
myAppSettings.config
archivo:Esto es bastante útil para escenarios en los que despliega una aplicación a un cliente y no desea que interfieran con el archivo web.config en sí y solo quiere que puedan cambiar solo algunas configuraciones.
ref: http://weblogs.asp.net/fmarguerie/archive/2007/04/26/using-configsource-to-split-configuration-files.aspx
fuente
MaintainScrollPositionOnPostback atributo en la directiva de página. Se utiliza para mantener la posición de desplazamiento de la página aspx en las devoluciones.
fuente
HttpContext.IsCustomErrorEnabled es una característica genial. Lo he encontrado útil más de una vez. Aquí hay una breve publicación al respecto.
fuente
De forma predeterminada, cualquier contenido entre etiquetas para un control personalizado se agrega como control secundario. Esto se puede interceptar en una anulación AddParsedSubObject () para filtrar o analizar adicionalmente (por ejemplo, el contenido de texto en LiteralControls):
...
fuente
Si tiene ASP.NET generando una fuente RSS, a veces colocará una línea adicional en la parte superior de la página. Esto no se validará con validadores RSS comunes. Puede solucionarlo colocando la directiva de la página
<@Page>
en la parte inferior de la página.fuente
Antes de que ASP.NET v3.5 agregara rutas, podía crear sus propias URL amigables simplemente escribiendo un HTTPModule y reescribiendo la solicitud al principio de la canalización de la página (como el evento BeginRequest).
Las URL como http: // servername / page / Param1 / SomeParams1 / Param2 / SomeParams2 se asignarían a otra página como se muestra a continuación (a menudo utilizando expresiones regulares).
DotNetNuke tiene un HttpModule realmente bueno que hace esto por sus URL amigables. Todavía es útil para máquinas donde no puede implementar .NET v3.5.
fuente