Почему имя "Request" не существует при записи в файле class.cs?
Я хотел бы переместить следующий фрагмент кода из файла aspx.cs С# в отдельный файл class.cs.
string getIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (String.IsNullOrEmpty(getIP)) getIP = Request.ServerVariables["REMOTE_ADDR"];
Этот фрагмент кода, используемый для размещения в файле page_load файла aspx.cs, работал отлично, но он вызывает ошибку в файле класса.
"Запрос" не нуждается в "использовании" в файле aspx.cs и не предлагает в этом контексте ничего.
Как решить эту проблему?
Ответы
Ответ 1
Request является свойством класса страницы. Поэтому вы не можете получить доступ к нему из "автономного" класса.
Однако вы можете получить HttpRequest в любом случае через HttpContext.Current
var request = HttpContext.Current.Request;
Обратите внимание, что это работает даже в статическом методе. Но только если вы находитесь в HttpContext (следовательно, не в приложении Winforms). Поэтому вы должны убедиться, что это не null
:
if (HttpContext.Current != null)
{
var request = HttpContext.Current.Request;
}
Изменить. Конечно, вы также можете передать запрос как параметр методу, который его использует. Это хорошая практика, поскольку она не работает. Таким образом, каждый клиент сразу узнает, работает ли этот класс/метод.
Ответ 2
Причина, по которой он не работает, заключается в том, что вы не можете получить доступ к переменным сервера в проекте библиотеки классов.
Вам следует избегать попыток сделать это действие как веб-класс и вместо этого передать информацию, необходимую для объекта класса, с помощью обычного параметра.