ASP.NET URL的MAX_PATH限制

11

我发现了一个 ASP.NET 的问题,我知道至少已经让其他人感到困惑。我们试图使用 HttpModule 来处理 Web 应用程序的通配符请求。生成的 URL 是动态的,可能会长达几百个字符。不幸的是,aspnet_isapi.dll 文件中似乎存在一些限制,它将 URL 中的路径长度限制为 MAX_PATH,该值在硬编码时为 260 个字符。

有人遇到过这个问题并找到了规避此限制的方法吗?查询字符串参数不是一个选项。

谢谢, Greg Ballard


该模块是否修改了URL并增加了其长度? - user1228
7个回答

8

我最终在 web.config 中使用以下内容来解决这个问题,使用的是 Mvc2 和 .Net Framework 4.0。

<httpRuntime maxUrlLength="1000" relaxedUrlToFileSystemMapping="true" />

谢谢!我喜欢简单的修复。 - Levitikon

8

这是与aspnet_isapi.dll相关的已知问题,目前还没有解决方法。当您在内置的Visual Studio Web服务器(也称为Cassini)中运行站点时,您不会看到此问题的原因是因为它都是托管代码,不依赖于aspnet_isapi.dll。

这将在未来版本的ASP.NET中得到解决。


5
四年过去了,问题仍未得到解决。 - capdragon
截至2012年12月仍未修复。 - Justin Skiles

3
实际上问题出在Windows上,而不是ASP.NET。Windows将MAX_PATH设置为260,当IIS接收到一个超过此长度的文件名请求时,它将失败。您可能已经找到了这篇KBase文章,但对于其他人来说:http://support.microsoft.com/kb/q177665/。适用于:部分显示这是从NT 3.51到Vista和Server 2003的预期行为。
至于解决方法,我遇到了类似的情况,但我们最终放弃了避免使用查询字符串参数的尝试,并且还是采用了它。

2
注册表键UrlSegmentMaxLength可以用于增加传入HTTP请求中每个Url段的默认Windows最大字符数260:
  • 键:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters
  • 值:UrlSegmentMaxLength
  • 类型:REG_DWORD
  • 数据:(您希望新的Url段允许的最大长度,例如4096)
允许的最大值为32766。如果指定了更大的值,则会被忽略。(来源:Juan Mendes)
有关http.sys设置的更多信息: http://support.microsoft.com/kb/820129 需要重新启动计算机才能使此设置生效。(来源:David Rettenbacher, Juan Mendes)
本回答的原始来源:https://dev59.com/DnM_5IYBdhLWcg3w3nfz#7817739

2

感谢您的回答。虽然我没有找到那篇确切的文章,但我找到了类似的文章。然而,这不是IIS的限制。您可以将更长的路径传递给IIS请求,并且它将返回正确的响应。您可以通过尝试一个简单的html页面来验证。只有在使用aspnet_isapi.dll处理请求时才会出现问题。即使在Visual Studio内置的调试服务器中,也可以处理比260更长的路径。


2
@Haacked:
Phil,你提到这是一个与aspnet_isapi.dll有关的问题。这是否意味着在IIS7集成管道模式下不应该存在这个问题?
然而,从我所听到的(http://forums.iis.net/t/1105360.aspx),它仍然存在。
我遇到了同样的问题,感觉有些束手无策。似乎影响了ASP.NET路由。因此,任何ASP.NET MVC应用程序的URL长度必须短于260个字符,否则必须回归查询字符串,这似乎完全相反!
(抱歉回答评论...没有足够的声望来评论:( )

0

您可以使用 URL 重写 ISAPI,例如 IIRF,将 URL 重写为 aspnet_isapi 可以处理的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接