[ASP.NET]ASP.NET 4.0 設定QueryString的最大長度

[ASP.NET]ASP.NET 4.0 設定QueryString的最大長度

熟悉Web系統開發的人應該多少都有踩過這個問題,就是當我們的QueryString長度超過2048字元時,QueryStringt會被截斷或者出現Error,這部分可以參考這篇文章:The QueryString Has a Maximum Length

嚴格來說,不同的瀏覽器都會有不同的結果,以IE6以上來說,就是2048個字元,FireFox3測試的結果是超過10000個字元都還可以運作,Chrome測試的結果也是相同,這邊有一篇比較完整的結果:
WWW FAQs: What is the maximum length of a URL?

以下我隨便抓了一個網頁,都給予很長的URL(主要是因為QueryString),
image 

我們可以留意一下網址最後頭我是兩個2。
image 

我把網址分別貼到IE、FireFox、Chrome上:

在IE上,我們發現URL的部分自動被截斷了,最後的22並沒有出現在URL上,而這時候若我們想要在網址列再多打上其他字元,這也是辦不到的,可見IE本身會自動幫我們把URL給截斷。
image 

在FireFox,URL被完整呈現,但會出現錯誤,這部分的錯誤不是FireFox的問題,而是ASP.NET本身回傳的錯誤訊息,這就是我們本篇要提到的內容,容後再述:
image
在Chrome,其實他的結果跟FireFox是一樣的,但因為網址列無法透過End按鈕直接跳到最後,我將網址列拉出來看的結果是跟我本來貼進去的相同,因此它也不會做截斷的動作。
image 

之前遇過QueryString過長導致URL超過上限的狀況是當我使用Reporting Service的URL Access模式去傳遞我的Where條件時,因為Where條件是由使用者去選擇,因此當他選擇的條件太過複雜時就有可能出現URL過長的現象,當初我們的解法是先把Where條件放到資料庫中,報表開啟後透過Code的方式去資料庫把Where條件撈出來,組成完整的條件後產生報表結果,但這個做法當初也花了不少時間嘗試,真的讓我們有點頭大。

而ASP.NET在4.0的版本中提供了兩個參數maxRequestPathLength、maxQueryStringLength分別用來設定URL的最大長度與QueryString的最大長度限制,但maxRequestPathLength這個參數我在RC版中一直找不到,我指有找到maxQueryStringLength,所以本篇只針對maxQueryStringLength做測試。


我在web.config中加入以下設定,把maxQueryStringLength設定到20480的長度:


<httpRuntime maxQueryStringLength="20480" />

再執行前面三個瀏覽器,這時候不管是FireFox或者Chrome都可以正常被執行了,由此可見我們可以透過調整設定讓QueryString的最大長度放寬。image
但老實說這邊還是讓我感到有些奇怪,那就是ASP.NET提供了設定QueryString長度限制,但IE本身卻會把超過2048長度的URL給截斷,而我還找不到方法去避開這個問題,所以即便提供了maxQueryStringLength這個設定,為了要讓User能夠使用IE+URL Access的方式開啟報表,保險起見,我還是會保留目前的做法來實現,這部分希望IE9會有所改變。

 

游舒帆 (gipi)

探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。