从ActionFilter .NET MVC写的Cookie [英] .NET MVC Write Cookie from ActionFilter
本文介绍了从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屋!
查看全文