網站中,設計了一個批量搜索的功能,用戶可以輸入多個關鍵詞進行批量查詢搜索,但不出意外的話還是出意外了,有些用戶可能會輸入N多個關鍵詞,我爲了性能等考慮,會限制個數,比如每次批量查詢僅限50個以內,但還是有意外發生,有些關鍵詞可能會很長,即會引發”HTTP Error 400. The request URL is invalid”的錯誤。如圖
按以前的經驗呢,先檢查了網站程序上的web.config文件,httpRuntime 節點下的maxUrlLength配置以及security節點下的requestFiltering》maxUrl ,
確認都以及設置過了
<httpRuntime targetFramework="4.6.1" enableVersionHeader="false" requestPathInvalidCharacters="" requestValidationMode="2.0" maxQueryStringLength="2097151000" maxUrlLength="2097151000" maxRequestLength="2097151000" relaxedUrlToFileSystemMapping="true" executionTimeout="36000" delayNotificationTimeout="36000" />
<security>
<requestFiltering allowDoubleEscaping="true" allowHighBitCharacters="true" >
<requestLimits maxAllowedContentLength="2097151000" maxQueryString="2097151000" maxUrl="2097151000" />
</requestFiltering>
</security>
還是出現”HTTP Error 400. The request URL is invalid”的錯誤,最後問度娘、谷歌,最終找到解決方法:修改服務器的註冊表。
Http.sys Windows 的註冊表設置(https://learn.microsoft.com/zh-CN/troubleshoot/developer/webapps/iis/iisadmin-service-inetinfo/httpsys-registry-windows)
可以在以下注冊表項下創建以下 DWORD 註冊表值:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
註冊表項 | 默認值 | 有效值範圍 | 註冊表項函數 | WARNING 代碼 |
---|---|---|---|---|
UrlSegmentMaxCount | 255 | 0 - 16,383 段 | 最大 URL 路徑段數。 如果爲零,則計數受最大值的 ULONGb 約束。 | 1 |
UrlSegmentMaxLength | 260 | 0 - 32,766 chars | URL 路徑段中的最大字符數 (URL) 中斜槓之間的區域。 如果爲零,則由最大值限制的 ULONG長度。 | 1 |
開幹!
進入註冊表 CMD =》 regedit=》HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
右擊空白區域,選擇Dword值,新建名稱 UrlSegmentMaxLength,雙擊鍵名,選擇十進制,值設置成2048,然後點擊 確認。
同樣,再新建名稱 UrlSegmentMaxCount,雙擊鍵名,選擇十進制,值設置成2048,然後點擊 確認。
如圖
需要注意的是,修改完以後不會立即生效,需重啓HTTP 服務。不想那麼麻煩,也可以簡單粗暴一下,重複服務器即可。
若不想或不允許重啓服務器,可以按如下步驟來重啓HTTP服務。
重啓 HTTP 服務、鍵入和所有相關的 IIS 服務,請執行以下步驟:
選擇 “開始”,選擇 “運行”,鍵 入 Cmd,然後選擇 “確定”。
停止HTTP服務:在命令提示符處,鍵入 net stop http,然後按 Enter。系統提示會停止相關聯的服務器,輸入y 確認繼續
啓動HTTP服務:在命令提示符處,鍵入 net start http,然後按 Enter。
停止IIS服務:在命令提示符處,鍵入 net stop iisadmin /y,然後按 Enter。
備註:依賴於 IIS 管理員服務服務的任何 IIS 服務也將停止。 請注意停止 IIS 管理員服務時停止的 IIS 服務。 下一步將重啓每個服務。
重啓步驟 4 中已停止的 IIS 服務。 爲此,請在命令提示符處鍵 net start servicename 入,然後按 Enter。 在命令中, servicename 是要重啓的服務的名稱。 例如,若要重啓萬維網發佈服務服務,請鍵入 net start World Wide Web Publishing Service,然後按 Enter。
再來測試一下,訪問正常啦!