Asp.net-Mvc

ASP.NET MVC,Url 路由:最大路徑 (URL) 長度

  • July 26, 2009

情景

我有一個應用程序,我們在其中採用了良好的舊查詢字元串 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 解決了這個問題

&lt;httpRuntime maxUrlLength="1000" relaxedUrlToFileSystemMapping="true" /&gt;

引用自:https://stackoverflow.com/questions/1185739