asp.net mvc中的Cookie没有设置

时间:2014-11-20 17:23:21

标签: c# asp.net-mvc cookies

我遇到了奇怪的情况。仅当字符串是硬编码时,才会保留set cookie。

public void OnActionExecuted(ActionExecutedContext filterContext)
{
    if (filterContext.HttpContext.Items["Theam"] != null)
    {
        var sTheam = filterContext.HttpContext.Items["Theam"].ToString();

        HttpCookie theamCookie = new HttpCookie("TheamCookie");

        theamCookie.Values.Add("TheamVal", sTheam);
        theamCookie.Expires = DateTime.UtcNow.AddDays(5);
        HttpContext.Current.Response.Cookies.Add(theamCookie);
    }
}

无论我做什么,cookie都不会持久存在。只有当将sTheam替换为类似于"丘比特"该值是持久的。那是

theamCookie.Values.Add("TheamVal", "cupid"); 

无效。

任何人都可以对发生的事情有所了解吗?我筋疲力尽,完全没有选择。经过8个多小时的调试,我意识到了这一点。但不确定为什么会发生这种情况。请帮忙。

更新:以下是CookieFilter。这是一个ASP.NET MVC应用程序。

public class CookieFilter : IActionFilter
{
    //private const string sTheamCookieName = "TheamCookie";
    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.HttpContext.Items["TheamToBrowser"] != null)
        {
            var sTheam = ((string)(filterContext.HttpContext.Items["TheamToBrowser"])).ToString(CultureInfo.InvariantCulture);

            HttpCookie theamCookie = new HttpCookie("TheamCookie");


            theamCookie.Values["TheamVal"] = "shamrock";
            theamCookie.Expires = DateTime.UtcNow.AddDays(5);
            filterContext.HttpContext.Response.Cookies.Add(theamCookie);
        }
    }

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpContextBase context = filterContext.HttpContext;
        HttpCookie theamCookie = context.Request.Cookies["TheamCookie"];

        if (theamCookie == null)
            context.Items["TheamFromBrowser"] = "default";
        else
        {
            if (string.IsNullOrEmpty(theamCookie.Value))
            {
                context.Items["TheamFromBrowser"] = "default";
            }
            else
                context.Items["TheamFromBrowser"] = theamCookie.Values["TheamVal"].ToString();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

关于这一行:

if (filterContext.HttpContext.Items["Theam"] != null)

HttpContext.Items是请求级别的设置。这意味着您需要在每个HTTP请求上重新加载它。如果您在执行此代码之前未在请求生命周期的某个位置设置HttpContext.Items["Theam"],则它将始终为空。

我不确定这是你的问题,但它可以解释为什么你手动设置变量时代码的其余部分正常工作。