Вопрос по c#, asp.net – Почему имя «Запрос» не существует при записи в файл class.cs?

20

Я хотел бы переместить следующий фрагмент кода из файла c # 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, и не предлагает ничего в этом контексте.

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

Ваш Ответ

2   ответа
1

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

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

48

Запрос это свойство класса страницы. Следовательно, вы не можете получить к нему доступ из «автономного» приложения. учебный класс.

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

 var request = HttpContext.Current.Request;

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

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы