2011-02-11 77 views
5

我以爲你不能在沒有重定向的情況下更改服務器上的QueryString。爲什麼Request.QueryString是隻讀的?

但此代碼的工作*對我來說:

Request.QueryString edit

我很驚訝。

因此,這裏有我這方面的問題:

  1. 爲什麼只讀的Request.QueryString?
  2. 爲什麼此代碼/黑客工作*?
  3. 它是否安全?如果在編輯完成後立即更改爲只讀,包括有關錯誤或意外行爲,以及關於維護和理解代碼?
  4. 如果您只使用PageLoad和OnPageRender,那麼在事件週期中如何進行這種瘋狂編輯是最有意義的?

*詳細信息:

我有可歸爲標籤上的項目頁面。每個選項卡都是一個asp:LinkBut​​ton

我希望能夠直接鏈接到特定選項卡。我用QueryString參數'tab = tabName'來做到這一點。有用。但是當我點擊一個新選項卡時,查詢字符串仍然在Url中,因此在Querystring中指定的選項卡被激活,而不是我單擊的那個。

通過使用Request.QueryString edit這不會發生。然後我的解決方案'工作'。

在此先感謝。

+0

你能後的加價頁面,我發現,當我撞頭與框架我一般都是做錯了什麼或者是蠢事,或者兩者都有。 – Lazarus 2011-02-11 12:02:05

+0

我的代碼有點涉及,所以它可能不會發布,除非我對這個問題稍微修改一下。謝謝你的提示。 – Skuli 2011-02-11 13:48:30

回答

10

那麼QueryString屬性是隻讀的,因爲它不能在單個請求上進行更改。顯然,瀏覽器只發送一個請求,只有一個字符串,因此只創建一個集合。黑客使用反射(即操縱代碼和內存)來改變你無法正常改變的東西。這個破解破壞了封裝和QueryString屬性的設計。你不應該使用它。從設計的角度來看,這是毫無意義的。你的查詢不會改變,爲什麼改變表示它的對象呢?只有瀏覽器可以發送新的查詢字符串,所以你基本上是躺在你自己的代碼上看看瀏覽器發送了什麼。

如果您希望標籤使用URL,只需使用超鏈接而不是LinkBut​​ton。

2

從我記憶中看,這是所有瀏覽器都遵守的安全標準。它的主要目的是阻止網絡釣魚攻擊,在那裏有人可以訪問www.MyLameWarcraftPhishingSite.com網站「,當有人點擊該網頁時,將網址重寫爲www.blizzard.com。要訪問該網址的唯一方法是實際上重定向到它

嗯,最後的職位是在2月11日 - 。希望其確定在此張貼

相關問題