Ответ недоступен в этом контексте при создании файлов cookie - PullRequest
0 голосов
/ 03 апреля 2010

привет, я определил один класс для создания куки по полученным параметрам от пользователя. когда я хочу добавить cookie в контекст, я получаю исключение.

Мой класс

public static class ManageCookies
{    
    public static void Create(string name, string value)
    {
        HttpCookie cookie = new HttpCookie(name);
        cookie.Value = value;
        cookie.Expires = DateTime.Now.AddYears(1);
        HttpContext.Current.Response.Cookies.Add(cookie);
    }

}

Произошло исключение: Ответ в этом контексте недоступен.


Я знаю, что это связано с контекстом, в котором выполняется текущая подпрограмма. я бы предложил моей функции передать текущий HttpResponse в качестве параметра этому параметру!

public static class ManageCookies
{    
    public static void Create(string name, string value, HttpResponse response)
    {
        HttpCookie cookie = new HttpCookie(name);
        cookie.Value = value;
        cookie.Expires = DateTime.Now.AddYears(1);
        response.Cookies.Add(cookie);
    }
    public static void PrePareForApplicationStart()
    {
        Create("somecookie", "somevalue", _context);
    }
}

это правильный путь? Зачем? а у тебя есть другой способ?

ОБНОВЛЕНИЕ: Оппс! с помощью этого способа еще есть первое исключение! : ((Справка Справка

ManageCookies manager = new ManageCookies(this.Context);
        manager.PrePareForApplicationStart();

Я использую приведенный выше код для отправки объекта HTTPContext в определенный класс. он вызывается из события Application_Start.

и класс ManageCookies обновлены, как показано ниже:

public class ManageCookies
{
    private HttpContext _context;
    public ManageCookies(HttpContext context)
    {
        this._context = context;
    }
}

я использую эту переменную (_context) для добавления файлов cookie!

1 Ответ

2 голосов
/ 03 апреля 2010

Код, который вы указали, не является проблемой, проблема в том, откуда вы звоните.Если вы вызываете его после того, как ответ сброшен или из потока, отличного от того, который назначен для обработки вашего запроса - вы можете получить всевозможные проблемы

В ответ на разъяснение Садег:

Этов том-то и дело.Запуск приложения происходит только один раз за время существования приложения.И я думаю, вы хотите, чтобы этот файл cookie доставлялся как часть каждого ответа.Другими словами, на ApplicationStart это не подходящее место для этого.Вы можете сделать это в любой момент в течение жизненного цикла страницы ДО конца PreRender

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