Почему Request.QueryString только для чтения? - PullRequest
5 голосов
/ 11 февраля 2011

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

Но этот код работает * для меня:

Request.QueryString edit

Я так поражен.

Итак, вот мои вопросы относительно этого:

  1. Почему Request.QueryString только для чтения?
  2. Почему этот код / ​​хак работает *?
  3. Насколько это безопасно, если вы перейдете на чтение только после того, как закончите редактирование, как в отношении ошибок или неожиданного поведения, так и в отношении поддержки и понимания кода?
  4. Где в цикле событий было бы наиболее целесообразно выполнить это сумасшедшее редактирование, если вы используете только PageLoad и OnPageRender?

* Подробнее:

У меня есть страница с элементами, которые сгруппированы по вкладкам. Каждая вкладка является asp: LinkButton

Я хочу иметь возможность напрямую ссылаться на определенную вкладку. Я делаю это с параметром QueryString 'tab = tabName'. Оно работает. Но когда я затем щелкаю новую вкладку, строка запроса все еще находится в URL-адресе, и, таким образом, активируется вкладка, указанная в строке запроса, а не та, на которую я нажал.

При использовании Request.QueryString edit этого не происходит. Тогда мое решение «работает».

Заранее спасибо.

Ответы [ 2 ]

10 голосов
/ 11 февраля 2011

Ну, свойство QueryString доступно только для чтения, потому что его нельзя изменить за один запрос. Очевидно, что браузер отправляет только один запрос с одной строкой, поэтому создается только одна коллекция. Хакер использует отражение (то есть манипулирует кодом и памятью), чтобы изменить то, что вы не можете изменить в обычном режиме. Этот хак нарушает инкапсуляцию и дизайн свойства QueryString. Вы не должны использовать это. Это не имеет смысла с точки зрения дизайна. Ваш запрос НЕ меняется, так зачем менять объект, который его представляет? Только браузер может отправлять новую строку запроса, так что вы врёте в собственный код о том, что отправил браузер.

Если вы хотите, чтобы вкладки использовали URL, просто используйте гиперссылки вместо LinkButton.

2 голосов
/ 07 июня 2011

Из того, что я помню, это стандарт безопасности, которого придерживаются все браузеры.Его главная цель - прекратить фишинговые атаки, когда у кого-то может быть веб-сайт www.MyLameWarcraftPhishingSite.com ", а когда кто-то переходит на страницу, переписать URL-адрес, чтобы он выглядел как www.blizzard.com. Единственный способ получить этот URL-адрес - этофактически перенаправить на него.

ммм, последнее сообщение было в 11 февраля - надеюсь, это нормально, чтобы опубликовать в этом.

...