5

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

但是这段代码对我有用*:

Request.QueryString 编辑

我很惊讶。

所以这是我的问题:

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

*更多细节:

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

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

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

提前致谢。

4

2 回答 2

10

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

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

于 2011-02-11T12:05:01.303 回答
2

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

嗯,最后一次发帖是在 2 月 11 日——希望可以在此发帖。

于 2011-06-07T19:55:54.763 回答