为什么Request.QueryString只读?

时间:2011-02-11 11:58:07

标签: asp.net request.querystring

我认为如果没有重定向,您无法更改服务器上的QueryString。

但是这段代码对我有效:

Request.QueryString edit

我很惊讶。

以下是我对此的疑问:

  1. 为什么Request.QueryString只读?
  2. 为什么这段代码/黑客工作*?
  3. 如果您在完成编辑后立即更改为readonly,无论是错误错误还是意外行为,以及维护和理解代码,它的安全性如何?
  4. 如果您只使用PageLoad和OnPageRender,那么在事件周期中哪个位置最适合进行疯狂编辑?

  5. *更多详情:

    我有一个页面,其中的项目已分组到标签中。每个选项卡都是一个asp:LinkBut​​ton

    我希望能够直接链接到特定标签。我使用QueryString参数'tab = tabName'来做到这一点。有用。但是当我单击一个新选项卡时,查询字符串仍然在Url中,因此Querystring中指定的选项卡被激活,而不是我点击的选项卡。

    使用Request.QueryString edit这不会发生。然后我的解决方案“有效”。

    提前致谢。

2 个答案:

答案 0 :(得分:10)

QueryString属性是只读的,因为它不能在单个请求上更改。显然,浏览器只发送一个只有一个字符串的请求,因此只创建一个集合。黑客使用反射(即操纵代码和内存)来改变你无法正常改变的东西。这个hack打破了QueryString属性的封装和设计。你不应该使用它。从设计的角度来看,没有任何意义。您的查询不会更改,所以为什么要更改代表它的对象?只有浏览器才能发送新的查询字符串,因此您基本上可以根据自己的代码说明浏览器发送的内容。

如果您希望选项卡使用URL,请使用超链接而不是LinkBut​​ton。

答案 1 :(得分:2)

从我记忆中读到,这是所有浏览器都遵守的安全标准。它的主要目的是阻止网络钓鱼攻击,有人可以访问网站www.MyLameWarcraftPhishingSite.com“当有人点击页面时,重写网址看起来像www.blizzard.com。获取该网址的唯一方法是实际上是重定向到它。

mmm,最后一篇文章是在2月11日 - 希望可以在此发帖。