Me gustaría escuchar sus opiniones y tal vez mejores sugerencias para el siguiente escenario:ASP.NET MVC, ActionFilters, clases estáticas y los datos que pasan alrededor
tengo definir un ActionFilter personalizado que hace algún trabajo y salga con algún valor. Me gustaría utilizar ese valor en acciones de controlador y en modelos.
Ahora, podría usar TempData para pasar este valor del ActionFilter a cualquier método de acción del controlador, luego distribuir este valor a todos los modelos que se pasan a las vistas devueltas.
Estoy seguro de que funcionará, pero este TempData estará allí en sesión donde y cuando ya nadie lo necesite. Se supone que el valor se utilizará exclusivamente en el código durante el tiempo de una sola solicitud, después de lo cual invalidará efectivamente.
he llegado con dos opciones:
En ActionFilter, que establezca este valor en TempData en OnActioExecuting() y retirarlo en OnActionExecuted(). ¿Entiendo correctamente que para cuando se llama OnActionExecuted, la acción del controlador ha finalizado, la respuesta ya se ha generado y este contenido TempData no ha llegado a la sesión todavía?
En cualquiera de mis clases estáticas personalizadas (lógica), solo defino una propiedad pública para este valor y la utilizo siempre que sea necesario. ¿Este campo estático no se perderá entre OnActionExecuting() y realmente se ejecutará el método del controlador? ¿Hay algún otro problema con la posibilidad de perder este valor durante el procesamiento de la solicitud en el servidor?
¿Hay alguna otra/mejores opciones que aún no haya considerado?
Muy interesante en realidad. ¿Es así que los parámetros del constructor de acciones se asignarán automáticamente a las claves de recopilación ActionParameters? – User
Sí, los parámetros de acción deben ser la forma preferida de pasar el valor en el controlador. – kazimanzurrashid
En última instancia, me gustó este enfoque, aunque definitivamente niega el principio SECO. Gracias por el consejo. – User