2010-02-24 12 views
5

Estoy creando un HttpModule que necesita conocer el valor de Thread.CurrentThread.CurrentCulture como se establece en una aplicación MVC. Ese valor está siendo establecido actualmente por el BaseController, pero cuando se activa mi método HttpModule.PostRequestHandlerExecute(), se revierte a lo que era Culture antes de la representación de la página.¿Por qué Thread.CurrentThread.CurrentCulture cambia entre Page Rendering y HttpModule.PostRequestHandlerExecute?

Me han duplicado mediante la creación de una aplicación web sencilla con estos pasos:

  1. Module.PreRequestHandlerExecute: Establecer la cultura a A
  2. Load: La cultura es actualmente la cultura A. ajustado en B
  3. Módulo .PostRequestHandlerExecute: la cultura hilo actual es A. yo esperaba que fuera B pero se cambió entre la renderización de páginas y PostRequestHandlerExecute

Cualquier idea de por qué .Net cha nges este valor o cómo podría evitarlo? El hilo es el mismo, por lo que algo en .Net debe revertir explícitamente la cultura.

Respuesta

2

Si simplemente establece la cultura para un subproceso en ejecución, cualquier operación que resulte en un cambio de subproceso (como otra parte del ciclo de vida de la página en asp.net) daría como resultado la reversión a la referencia cultural predeterminada.

Lo que se recomienda es aquí ...

http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

Esta página discute 3 opciones ...

  1. Ajuste de la cultura para toda la aplicación.
  2. Configuración de la cultura en el nivel de página.
  3. Establecimiento de la cultura mediante programación por solicitud.

Vale la pena señalar que los módulos se cargan como parte de una solicitud de página, por lo que cambiar la cultura a nivel de página debería cambiarla para todos los módulos en esa solicitud.

+0

* Debería * cambiar la configuración regional para todos los módulos en la solicitud, pero no es así. Ese es el problema. Vea el paso 3 en la pregunta original. No hay cambio de hilo entre la representación de la página y la activación posterior a la solicitud en el módulo. –

+1

no hay cambio de subprocesos en su código, pero no puede garantizar eso en el código .Net. Creo que debes establecer la cultura en el nivel de solicitud y no en el nivel de subproceso que resuelve mi respuesta. En otras palabras, establecer u obtener la cultura en el hilo actual no le dará lo que desea. necesita configurar toda la solicitud y la forma de hacerlo es implementar manualmente el evento de cultura init anulando. ... ¿Lo entiendes? – War

Cuestiones relacionadas