/ / Almacenamiento del valor de la cookie en la variable global en asp.net mvc - asp.net-mvc, cookies

Almacenar valor de cookie en variable global en asp.net mvc - asp.net-mvc, cookies

Tengo un ASP.NET MVC blog, para mostrar las publicaciones y las fechas de comentarios en la zona horaria del cliente se utiliza una cookie, la cookie contiene el desplazamiento de la zona horaria del cliente. Cuando el servidor recibe una solicitud, leerá el valor de compensación de la cookie y cambiará todas las fechas en consecuencia antes de enviarlo al navegador. Mi pregunta es cómo puedo almacenar la cookie en una variable global en cada solicitud para que pueda acceder desde cualquier lugar para el ajuste de la fecha.

Respuestas

0 para la respuesta № 1

Puede usar una variable de sesión si no desea usar la cookie cada vez

session["MyVarName"] = mycookievalue

entonces puede acceder a la sesión cada vez que lo necesite.

También puede pensar en implementar e modelbinder personalizado para poder vincular el valor de su sesión a un modelo. (Por ejemplo, una clase UserSettingsModel)


1 para la respuesta № 2

Generalmente, cuanto más controladores y acciones dependen de los valores suministrados desde el exterior, más comprobables y robustas se vuelven. Lo haría de esta manera

Primero, cree un modelo que contenga configuraciones para la zona horaria

public class ClientTimeZoneSettings
{
public string TimeZoneName {get; set;} // or whatever
}

Luego, crea un modelo de carpeta. Ese modelo de carpeta se usará para extraer valores de la cookie

public class ClientTimeZoneSettingsModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (controllerContext.RequestContext.HttpContext.Request.Cookies.AllKeys.Contains("timeZoneName"))
{
bindingContext.Model = new ClientTimeZoneSettings {TimeZoneName = controllerContext.RequestContext.HttpContext.Request.Cookies["timeZoneName"]; }
}

}
}

Registre esa carpeta de modelo en Global.asax

Void protegido Application_Start () { AreaRegistration.RegisterAllAreas ();

RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);


ModelBinders.Binders.Add(typeof(ClientTimeZoneSettings), new ClientTimeZoneSettingsModelBinder());

}

Y el punto principal. En todas sus acciones que requieren esa configuración, puede usar directamente ClientTimeZoneSettings como parámetro

public ActionResult ShowComments(ClientTimeZoneSettings settings)
{
// use settings
}

ACTUALIZAR: Enfoque significativamente más simple:

Instalar MvcFutures De Nuget. Contiene CookieValueProviderFactory que inspeccionará automáticamente las cookies en busca de valores cuando se enlace el modelo. Para usarlo, simplemente agregue en ValueProviderFactories

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();

RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);

ValueProviderFactories.Factories.Add(new CookieValueProviderFactory());
}

Y luego nombra tu parámetro acorde al nombre de la cookie

public ActionResult ShowComments(string timeZoneName)
{
// timeZoneName will contain your cookie value
return View();
}