我有一个应用程序,我们采用了旧的查询字符串URL结构:
?x=1&y=2&z=3&a=4&b=5&c=6
Run Code Online (Sandbox Code Playgroud)
并将其更改为路径结构:
/x/1/y/2/z/3/a/4/b/5/c/6
Run Code Online (Sandbox Code Playgroud)
我们正在使用ASP.NET MVC和(自然地)ASP.NET路由.
问题是我们的参数是动态的,并且(理论上)我们需要适应的参数数量没有限制.
这一切都很好,直到我们受到以下列车的打击:
HTTP错误400.0 - 错误请求ASP.NET在URL中检测到无效字符.
当我们的URL超过一定长度时,IIS会抛出此错误.
这是我们发现的:
IIS确实有最大路径长度限制,但上面的错误不是这个.
了解dot iis dot net如何使用请求过滤部分"根据请求限制过滤"
如果IIS的路径太长,它将抛出404.14,而不是400.0.
此外,IIS最大路径(和查询)长度是可配置的:
<requestLimits
maxAllowedContentLength="30000000"
maxUrl="260"
maxQueryString="25"
/>
Run Code Online (Sandbox Code Playgroud)
经过一番探讨:
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 limit问题ID 265251
那么问题是什么?
问题是,这有多大的限制?
对于我的应用程序,它是一个交易杀手.对于大多数应用程序,它可能不是问题.
披露怎么样?没有提到ASP.NET路由的地方我听过这个限制的窥视.ASP.NET MVC使用ASP.NET路由这一事实使其影响更大.
你怎么看?