2012-05-24 2 views
0

У меня такое чувство, что я неправильно использую HttpContext.Current, основанный на некотором странном выходе кода.HTTPContext.Current problems - правильно ли я использую его?

У меня есть две страницы, http://example.com/Foo.aspx и http://example.com/Bar.aspx. У обоих есть кнопка, которая при нажатии вызывает статическую функцию в классе за пределами контекста страницы, который отправляет мне сообщение System.Web.HttpContext.Current.Request.Url.AbsolutePath, которое видит эта статическая функция.

Я бы ожидал, что при отправке кнопки на Foo.aspx он отправит мне по электронной почте «/Foo.aspx» ... и обычно это так. Мы заметили один раз, когда этот звонок из Foo.aspx неожиданно отправил нам «/Bar.aspx».

Обе страницы могли быть предположительно загружены одним и тем же клиентом.

  • Что здесь происходит? Как HttpContext.Current.Request возвращает другой путь, чем страница, вызывающая статическую функцию, которая ссылается на нее?
  • Как я могу получить то, что хочу, т. Е. Непременно получить абсолютный путь страницы, называемой статической функцией, которая ее волнует?
+0

Вы можете показать код метода, о котором говорите? – hwcverwe

ответ

2
  • Как я понимаю, вы правильно используете текущий контекст. Он всегда должен быть запрошенным URL. Если вы сделали что-то вроде Server.Transfer, вы могли бы оказаться в ситуации, когда URL-адрес не совпадает с URL-адресом текущей исполняемой страницы (но я не думаю, что я пробовал это).
  • Вы можете передать страницу на свое имя.
+0

+1 для того, чтобы страница передала свое имя в качестве аргумента функции. – Steve

+0

Я думаю о передаче статической функции объекта HttpContext.Current непосредственно со страницы, чтобы убедиться, что она получена правильно. – Chris

0

HttpContext.Current.Request вернет правильный путь для потока, который обрабатывает ваш запрос (даже если ASP.NET переключает обработку запроса на другой поток). Вы уверены, что вызываете его в одном потоке? И вы на 100% уверены, что каким-то образом вы не получили еще один запрос для Foo.aspx в одно и то же или подобное время?

+0

Статики разделяются между потоками, поэтому не имеет значения, какой поток взаимодействует с объектом. Я считаю, что ASP.NET изолирует запросы через AppDomains, и поэтому они не могут вмешиваться друг в друга, если вы не делаете что-то конкретное, чтобы разрешать междоменную связь. – Steve

+1

HttpContext.Current является потоковым (то есть, статическим для любого доступа к нему в одном потоке), а не статичным, а время выполнения ASP.NET иногда переключает поток, который использует длинные запросы, и в этом случае ASP. NET runtime также обновит threadstatic значение HttpContext.Current. –

+0

Я посмотрел в нее больше, и вы правы. HttpContext.Current выполняет поиск в потоковом хранилище. – Steve

Смежные вопросы