2010-05-14 76 views
6
http://site.com/page%3fcharacter 

此URL將返回以下錯誤:ASP.NET 4 URL限制:爲什麼URL不能包含任何%3F字符

Illegal characters in path. 

我已經把這個在web.config中:

<system.web> 
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="" /> 
<pages validateRequest="false"> 
... 

我該如何解決這個錯誤?

回答

23

如果要通過允許的要求,需要添加requestPathInvalidCharacters和設置爲空字符串:

<system.web> 
    <httpRuntime requestPathInvalidCharacters="" /> 
</system.web> 

編輯你應該離開你原來的問題的地方,因爲現在我的答案是沒有意義的。

但在回答你的第二個問題時,這是因爲%3f對應於'?'這在Windows的文件名中是不允許的。您可以將relaxedUrlToFileSystemMapping屬性設置爲true改變這種行爲:

<system.web> 
    <httpRuntime requestPathInvalidCharacters="" 
       relaxedUrlToFileSystemMapping="true" /> 
</system.web> 

你可能想看看通過所有在HttpRuntimeSection類中的屬性,看看是否有可能適用的任何人。

你也可以實現一個RequestValidator的子類,並設置你的web.config使用你的子類(這大概會允許所有的URL通過?)。就個人而言,我不會打擾,只是讓內置的類來處理它。一個普通用戶不太可能每次都去在路徑中輸入「%3f」,爲什麼還要花費很多麻煩來改善惡意用戶的使用情況呢?

順便說一下,這實際上是ASP.NET 4中的一項新功能,這就是爲什麼Stack Overflow不會吐出一個錯誤:它運行在.NET 3.5上。

+0

解決了這個問題。但我得到另一個URL的另一個錯誤。我將編輯該問題。 – stacker 2010-05-14 00:41:34

+0

1.重寫路徑。 2.返回空白頁面(或自定義錯誤頁面)。 3.重定向到主頁。我想有權決定如何應對這種錯誤。 – stacker 2010-05-14 01:29:42

+0

我可以爲此進行集成測試嗎? http://stackoverflow.com/questions/2831075/integrationtests-a-potentially-dangerous-request-path-value-was-detected-from-t – stacker 2010-05-14 02:15:29

1

可能因爲這看起來很像一個畸形的網址。

&用作查詢分隔字符串參數,即site.com/page?some=20 &另一= 15

+0

這是正確的。但想象一下,有人發佈像這樣的網址到您的網站和用戶看到這樣的錯誤......這令人困惑! – stacker 2010-05-14 00:42:37

相關問題