Добавление ссылки на System.Web - PullRequest
1 голос
/ 03 апреля 2012

Я пытаюсь создать несколько файлов cookie, так как я не могу получить файлы cookie обычным способом, поэтому я пробежусь по всему заголовку и просто создаю файл cookie вручную. Однако всякий раз, когда я пытаюсь использовать Response.Cookies и HttpCookie, я получаю сообщение об ошибке:

Имя Ответ не существует в текущем контенте

и

Не удалось найти тип или имя пространства имен 'HttpCookie' (отсутствует директива using или ссылка на сборку?).

Я прочитал и понял, что мне понадобится ссылка

System.Web

Итак, я нажимаю Project -> Add Reference -> .NET и выбираю System.Web. Затем я добавляю using System.Web;.

И все же я не могу получить к ним доступ.

1 Ответ

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

Из какого кода вы пытаетесь получить доступ к предмету?

Существуют два основных шага для ссылки на класс:

  1. Добавить ссылку на сборку класса в проекте.
  2. Добавить директиву using в пространство имен класса в файле кода.

Звучит так, будто вы выполнили первый шаг. Как насчет второго? Вот что означает эта ошибка:

Не удалось найти тип или имя пространства имен 'HttpCookie' (отсутствует директива using или ссылка на сборку?).

Чтобы выполнить шаг 2, описанный выше, у вас есть несколько вариантов:

  1. Полностью уточните название класса. Таким образом, вместо использования HttpCookie вы бы использовали System.Web.HttpCookie.
  2. Добавить директиву using в файл кода. В верхней части файла (и это необходимо сделать для любого файла, который использует классы в этом пространстве имен), вы должны добавить using System.Web. Тогда вы можете просто сослаться на HttpCookie напрямую.

Кроме того, первая часть вашего вопроса поднимает отдельную проблему:

Имя Response не существует в текущем контексте

Это снова возвращает меня к моему вопросу о том, откуда вы получаете доступ к этому значению. Когда вы пишете код, скажем, в виде кода для страницы ASPX, вы по умолчанию получаете доступ к различным битам веб-контекстов ASP.NET. Они предоставляются базовым классом Page. Такие вещи, как Request и Response легко доступны.

Однако, если вы пытаетесь получить доступ к этим объектам вне этого контекста (например, из пользовательского класса или другой сборки), вам нужно будет ссылаться на этот контекст вручную. Это можно сделать с помощью фабрики System.Web.HttpContext class :

  1. Request становится System.Web.HttpContext.Current.Request
  2. Response становится System.Web.HttpContext.Current.Response

Это потому, что Request и Response не являются реальными классами. Это свойства текущего веб-контекста типа HttpRequest и HttpResponse. Эти свойства отображаются для вас, когда вы находитесь в том же контексте, но вне этого контекста вам нужно будет ссылаться на них полностью, как показано выше.

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

Если ваши пользовательские классы зависят от существования текущего экземпляра HttpContext, то этот код никогда не может использоваться вне полностью осведомленного контекста веб-приложения. Таким образом, код менее пригоден для повторного использования. Таким образом, в зависимости от того, что вам нужно из этого контекста, вы можете повторно учитывать код, чтобы не нуждаться в самом контексте, а только требовать предоставления необходимых элементов из контекста.

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

...