ASP.NET MVC,Url 路由:最大路徑 (URL) 長度
情景
我有一個應用程序,我們在其中採用了良好的舊查詢字元串 URL 結構:
?x=1&y=2&z=3&a=4&b=5&c=6並將其更改為路徑結構:
/x/1/y/2/z/3/a/4/b/5/c/6我們正在使用 ASP.NET MVC 和(自然) ASP.NET 路由。
問題
問題是我們的參數是動態的,並且(理論上)我們需要適應的參數數量沒有限制。
這一切都很好,直到我們被以下火車撞到:
HTTP 錯誤 400.0 - 錯誤請求 ASP.NET 在 URL 中檢測到無效字元。
當我們的 URL 超過一定長度時,IIS 會拋出這個錯誤。
堅韌不拔
這是我們發現的:
這不是 IIS 問題
IIS 確實有最大路徑長度限制,但上述錯誤不是這個。
學習 dot iis dot net 如何使用請求過濾部分“基於請求限制的過濾”
如果路徑對於 IIS 來說太長,它會拋出 404.14,而不是 400.0。
此外,IIS 最大路徑(和查詢)長度是可配置的:
<requestLimits maxAllowedContentLength="30000000" maxUrl="260" maxQueryString="25" />這是一個 ASP.NET 問題
經過一番摸索:
IIS 論壇主題:ASP.NET 2.0 的最大 URL 長度? <http://forums.iis.net/t/1105360.aspx>
事實證明,這是一個 ASP.NET(嗯,確實是 .NET)問題。
問題的核心是,據我所知,ASP.NET 無法處理超過 260 個字元的路徑。
棺材上的釘子是菲爾·哈克本人證實的:
Stack Overflow ASP.NET url MAX_PATH 限制問題 ID 265251
問題
那麼問題是什麼?
問題是,這個限制有多大?
對於我的應用程序來說,這是一個交易殺手。對於大多數應用程序來說,這可能不是問題。
披露呢?沒有任何地方提到過 ASP.NET 路由,我從來沒有聽說過這個限制。ASP.NET MVC 使用 ASP.NET 路由這一事實使這種影響更大。
你怎麼看?
我最終在 web.config 中使用以下內容使用 Mvc2 和 .Net Framework 4.0 解決了這個問題
<httpRuntime maxUrlLength="1000" relaxedUrlToFileSystemMapping="true" />