ASP.NET MVC - Доступ к данным Cookies в неконтроллерном классе - PullRequest
3 голосов
/ 05 ноября 2011

Мне нужно написать функцию, которая поможет мне что-то сделать в некоторых из моих контроллеров, поэтому я решил создать класс с именем 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 ]

8 голосов
/ 05 ноября 2011

Вы можете использовать HttpContext.Current.Request и HttpContext.Current.Response в своем классе помощника.

3 голосов
/ 27 августа 2013

Хотя первый ответ технически точен, я сталкиваюсь с проблемами несоответствия с созданием cookie с использованием внешнего .DLL.Код позади класса вызывает методы во внешнем .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;
    }
0 голосов
/ 05 ноября 2011

По сути, это то же самое, что и доступ к сеансу. Используйте httpcontext.current, хотя иногда его осуждают, но здесь упоминается его очистка: Могу ли я использовать переменную ASP.NET Session [] во внешней DLL

Здесь вы можете определить интерфейс, такой как IRequest, для абстрагирования конкретной реализации, но это ваше дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...