ASP.NET MVC - 在非Controller类中访问Cookies数据

时间:2011-11-05 14:40:02

标签: asp.net-mvc-3

我需要编写一个函数来帮助我在某些控制器中执行某些操作,因此我决定为此创建一个名为 Helper 的类。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;

namespace HocVuiDiary.Helper
{
    public class CookiesHelper
    {
        public void UpdateSubkey(string name, string subkey, string subvalue)
        {
            HttpCookie cookie;
            if (Request.Cookies[name] == null)
            {
                cookie = new HttpCookie(name);
                cookie[subkey] = subvalue;
            }
            else
            {
                cookie = Request.Cookies[name];
                cookie[subkey] = subvalue;
            }
            cookie.Expires = DateTime.Now.AddDays(30);
            Response.Cookies.Add(cookie);
        }
    }
}

问题是我无法再访问请求或响应!
请告诉我正确的方法!

3 个答案:

答案 0 :(得分:8)

您可以在助手类中使用HttpContext.Current.RequestHttpContext.Current.Response

答案 1 :(得分:3)

虽然第一个答案在技术上是准确的,但我遇到了与使用外部.DLL创建cookie不一致的问题。类后面的代码调用外部.dll中的方法,cookie被创建,但在导航到下一页后,cookie有时不存在。

    public void CreateCookie(string cookieName, string key, string value)
    {
        int minutes = 95;
        string encryptedValue = utilities.EncryptString(value);
        HttpCookie cookie = new HttpCookie(cookieName);
        cookie[key] = encryptedValue;
        cookie.Expires = DateTime.Now.AddMinutes(minutes);
        HttpContext.Current.Response.Cookies.Add(cookie);
    }

对外部类的其他调用正在按预期工作。

    public bool CheckCookieExists(string cookieName)
    {
        bool exists = true;
        HttpCookie cookie = HttpContext.Current.Request.Cookies[cookieName];
        if (cookie != null)
        {
            return exists;
        }
        return exists = false;
    }

答案 2 :(得分:0)

它与访问会话基本相同。使用httpcontext.current虽然有时不满意这里提到清理它: Can I use ASP.NET Session[] variable in an external DLL

在这里你可以定义一个像IRequest这样的接口来抽象出具体的实现,但这取决于你。