从ActionFilter .NET MVC写的Cookie [英] .NET MVC Write Cookie from ActionFilter

查看:336
本文介绍了从ActionFilter .NET MVC写的Cookie的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我建立了一个ActionFilter主办我的MVC网站时,页面命中记录器和有需要的一些值保存到cookie中。我用下面的code写的cookie的:

I built an ActionFilter to host a page hit logger on my MVC site and have the need to save some values into cookie. I've used the following code to write the cookie:

public class LogRequestAttribute : ActionFilterAttribute, IActionFilter
{
   void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
   {
       if(filterContext.HttpContext.Request.UserHostAddress != "127.0.0.1")
           ThreadPool.QueueUserWorkItem(delegate
           {
               string adid = filterContext.HttpContext.Request.QueryString["adid"] != null 
                   ? (string)filterContext.HttpContext.Request.QueryString["adid"] : string.Empty;

               if (!String.IsNullOrEmpty(adid))
               {
                   HttpCookie cookie = new HttpCookie("adid", adid);
                   cookie.Expires = DateTime.Now.AddDays(30);
                   filterContext.HttpContext.Response.Cookies.Add(cookie);
               }

               DomainModel.Concrete.SqlPageHitActivity logger 
                   = new DomainModel.Concrete.SqlPageHitActivity(
                       System.Configuration.ConfigurationManager.ConnectionStrings["TrackingConnectionString"].ConnectionString);

               DomainModel.Entities.PageHitActivity hit = new DomainModel.Entities.PageHitActivity
               {
                   AdIdentifier = filterContext.HttpContext.Response.Cookies["adid"].Value == null ? string.Empty : filterContext.HttpContext.Response.Cookies["adid"].Value,
                   Authenticated = filterContext.HttpContext.Request.IsAuthenticated,
                   Browser = filterContext.HttpContext.Request.UserAgent,
                   CookieId = string.Empty,
                   Parameters = string.Empty,
                   Referer = filterContext.HttpContext.Request.UrlReferrer == null ? string.Empty : filterContext.HttpContext.Request.UrlReferrer.ToString(),
                   RequestDate = DateTime.Now,
                   RequestorIP = filterContext.HttpContext.Request.UserHostAddress,
                   SessionId = string.Empty,
                   SiteId = 1,
                   Target = filterContext.HttpContext.Request.Url != null ? filterContext.HttpContext.Request.Url.AbsoluteUri : string.Empty,
                   UserId = filterContext.HttpContext.Request.IsAuthenticated ? filterContext.HttpContext.User.Identity.Name : string.Empty
               };
               logger.LogHit(hit);
           });
   }
}

该Cookie似乎出现在集合中,但是当随后的页面命中记录将不可用。

The cookie seems to appear in the collection but is not available when a subsequent page hit is logged.

谢谢,
克里斯

Thanks, Chris

推荐答案

尝试添加一个新的cookie,而不是修改现有的集合:

Try adding a new cookie instead of modifying the existing collection:

HttpCookie cookie = new HttpCookie("adid", MyValue);
cookie.Expires = DateTime.Now.AddDays(30);

filterContext.HttpContext.Response.Cookies.Add(cookie);

这篇关于从ActionFilter .NET MVC写的Cookie的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆