2010-08-22 24 views
0

我在IIS7上遇到錯誤的請求錯誤400。我在URL字符串中編碼了特殊字符。我的URL看起來像這樣(不喜歡%26):IIS7 .NET 3.5上的錯誤請求錯誤400

http://www.myjobs.com/a/q-Barnes+%26+Noble 

這將是,如果我是在.NET 4.0上運行一個簡單的辦法,但我對Rackspace的雲,只能在IIS7運行。 NET 3.5。

這是我會在我的web.config中使用,如果我是在IIS7 .NET 4.0:在IIS7和.NET 3.5運行時

requestPathInvalidCharacters="" 

有沒有什麼其他選擇?

+1

我遇到了類似的問題,在我的[SO問題](http://stackoverflow.com/questions/3536795/asp-net-mvc-search-criteria-as-route-parameter-in-stead-的-查詢字符串-illega)。基本上在我的情況下,我不得不求助於查詢字符串 - 「http://www.myjobs.com/a?q = q-Barnes +%26 + Noble」 – 2010-08-22 23:47:46

回答

0

您可以提出這樣的請求的唯一方法是如果您更改註冊表。 對於IIS在32位模式下運行,添加下面的DWORD鍵,如果你在64位模式下運行IIS其值設置爲1個 HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\ ASP.NET \ VerificationCompatibility

,添加以下DWORD鍵並將其值設置爲1 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ ASP.NET \ VerificationCompatibility

不確定您的託管環境是否允許您訪問該資料。我在IIS 7.5上測試了它,並能夠使用如下編碼的URL向/ Barnes & Noble/default.aspx發送請求:Response.Redirect(Server.UrlEncode(「Barnes & Noble」)+「/default.aspx」 );

0

爲什麼要在URL中編碼特殊字符?

爲什麼不將它們全部轉換爲更具搜索引擎友好性的表單,只有字母數字字符和短劃線,並將該特殊表單存儲在數據庫中。或者,更容易的是,將該ID包含在URL中並使用後一部分,以使其易於人們閱讀並且對搜索引擎友好:

例如, www.myjobs.com/a/1234/q-Barnes-and-noble

這種方法也意味着你可以稍後改變你的編碼(也許增加一些新的特殊字符到alpha映射),並沒有任何404的。