Почему Request.QueryString доступен только для чтения?

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

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

Request.QueryString редактировать

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

Вот мои вопросы по этому поводу:

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

* Подробнее:

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

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

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

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


person Skuli    schedule 11.02.2011    source источник
comment
Можете ли вы опубликовать разметку для своей страницы, я обнаружил, что когда я бодаюсь с фреймворком, я обычно делаю что-то не так, или глупо, или и то, и другое.   -  person Lazarus    schedule 11.02.2011
comment
Мой код немного задействован, поэтому, вероятно, его не стоит публиковать, если я немного не урежу его для этого вопроса. Спасибо за совет.   -  person Skuli    schedule 11.02.2011


Ответы (2)


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

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

person Stilgar    schedule 11.02.2011
comment
Спасибо за ответ. Как мне избавиться от параметра QueryString при последующих обратных передачах? - person Skuli; 11.02.2011
comment
Ответ. Однако я сомневаюсь, что вам нужны вкладки для публикации. Это может быть так, но обычно это не лучший способ сделать это. - person Stilgar; 11.02.2011

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

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

person boolean    schedule 07.06.2011