Asp.net mvc 在asp.net mvc中在全局变量中存储cookie值
我有一个ASP.NETMVC博客,为了在使用cookie的客户端时区中显示帖子和评论日期,cookie包含客户端时区偏移量。当服务器收到请求时,它将从cookie中读取偏移量值,并在发送到浏览器之前相应地更改所有日期。我的问题是如何在每次请求时将cookie存储在全局变量中,以便任何地方都可以访问它以进行日期调整。如果不想每次都使用cookie,可以使用会话变量Asp.net mvc 在asp.net mvc中在全局变量中存储cookie值,asp.net-mvc,cookies,Asp.net Mvc,Cookies,我有一个ASP.NETMVC博客,为了在使用cookie的客户端时区中显示帖子和评论日期,cookie包含客户端时区偏移量。当服务器收到请求时,它将从cookie中读取偏移量值,并在发送到浏览器之前相应地更改所有日期。我的问题是如何在每次请求时将cookie存储在全局变量中,以便任何地方都可以访问它以进行日期调整。如果不想每次都使用cookie,可以使用会话变量 session["MyVarName"] = mycookievalue 然后,您可以在每次需要时访问会话 您还可以考虑实现e cu
session["MyVarName"] = mycookievalue
然后,您可以在每次需要时访问会话
您还可以考虑实现e custom modelbinder,以便将会话的值绑定到模型。(例如一个类UserSettingsModel)一般来说,控制器和操作越依赖于外部提供的值,它们就越具有单元可测试性和健壮性。我会这样做的 首先,创建保存时区设置的模型
public class ClientTimeZoneSettings
{
public string TimeZoneName {get; set;} // or whatever
}
然后,创建模型绑定器。该模型绑定器将用于从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"]; }
}
}
}
在Global.asax中注册该模型绑定器
受保护的无效应用程序\u Start()
{
RegisterAllAreas()
}
重点。在所有需要这些设置的操作中,您可以直接使用ClientTimeZoneSettings
作为参数
public ActionResult ShowComments(ClientTimeZoneSettings settings)
{
// use settings
}
更新:非常简单的方法:
从nuget安装。它包含CookieValueProviderFactory
,在绑定模型时将自动检查Cookie中的值。要使用它,只需将其添加到valueProviderFactorys
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
ValueProviderFactories.Factories.Add(new CookieValueProviderFactory());
}
然后根据cookie名称命名参数
public ActionResult ShowComments(string timeZoneName)
{
// timeZoneName will contain your cookie value
return View();
}
public ActionResult ShowComments(string timeZoneName)
{
// timeZoneName will contain your cookie value
return View();
}