.NET MVC Написать Cookie из ActionFilter - PullRequest
3 голосов
/ 13 октября 2009

Я создал ActionFilter для размещения регистратора попаданий на моем сайте MVC и мне необходимо сохранить некоторые значения в cookie. Я использовал следующий код для написания 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 появляется в коллекции, но недоступен, когда регистрируется последующее посещение страницы.

Спасибо, Крис

Ответы [ 2 ]

9 голосов
/ 13 октября 2009

Попробуйте добавить новый файл cookie вместо изменения существующей коллекции:

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

filterContext.HttpContext.Response.Cookies.Add(cookie);
1 голос
/ 13 октября 2009

Вы установили срок действия куки? Срок действия файла cookie по умолчанию - файл cookie сеанса (удаляется при закрытии браузера). Чтобы сохранить файл cookie на диск, необходимо указать его в будущем.

...