Почему имя "Request" не существует при записи в файле class.cs? - программирование
Подтвердить что ты не робот

Почему имя "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 и не предлагает в этом контексте ничего.

Как решить эту проблему?

4b9b3361

Ответ 1

Request является свойством класса страницы. Поэтому вы не можете получить доступ к нему из "автономного" класса.

Однако вы можете получить HttpRequest в любом случае через HttpContext.Current

 var request = HttpContext.Current.Request;

Обратите внимание, что это работает даже в статическом методе. Но только если вы находитесь в HttpContext (следовательно, не в приложении Winforms). Поэтому вы должны убедиться, что это не null:

if (HttpContext.Current != null)
{
    var request = HttpContext.Current.Request;
}

Изменить. Конечно, вы также можете передать запрос как параметр методу, который его использует. Это хорошая практика, поскольку она не работает. Таким образом, каждый клиент сразу узнает, работает ли этот класс/метод.

Ответ 2

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

Вам следует избегать попыток сделать это действие как веб-класс и вместо этого передать информацию, необходимую для объекта класса, с помощью обычного параметра.