【发布时间】:2010-11-14 05:14:37
【问题描述】:
情景
我有一个应用程序,我们采用了良好的旧查询字符串 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 个字符的路径。
菲尔·哈克本人证实了这一点:
堆栈溢出 ASP.NET url MAX_PATH 限制 问题ID265251
问题
那么问题是什么?
问题是,这个限制有多大?
对于我的应用来说,它是一个交易杀手。对于大多数应用来说,这可能不是问题。
披露呢?没有任何地方提到过 ASP.NET 路由,我从来没有听说过这个限制。 ASP.NET MVC 使用 ASP.NET 路由这一事实使其影响更大。
你怎么看?
【问题讨论】:
标签: asp.net-mvc iis url routing asp.net-routing