ASP.NET url MAX_PATH 限制

Posted

技术标签:

【中文标题】ASP.NET url MAX_PATH 限制【英文标题】:ASP.NET url MAX_PATH limit 【发布时间】:2010-09-20 21:13:08 【问题描述】:

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

有没有其他人遇到过这个问题并找到了绕过这个限制的方法? 查询字符串参数不是一个选项。

谢谢, 格雷格·巴拉德

【问题讨论】:

模块正在修改 URL 并增加其长度? 【参考方案1】:

这是 aspnet_isapi.dll 的一个已知问题,目前没有解决方法。在内置的 Visual Studio Webserver(又名 Cassini)中运行您的网站时看不到此问题的原因是因为它都是托管代码并且不依赖于 aspnet_isapi.dll。

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

【讨论】:

(+1) 4 年后,仍然没有修复。 截至 2012 年 12 月仍未修复。【参考方案2】:

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

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

【讨论】:

谢谢!我喜欢简单的修复【参考方案3】:

问题实际上在于 Windows,而不是 ASP.NET。 Windows 已将 MAX_PATH 设置为 260,当 IIS 请求更长的文件名时,它将失败。您可能已经找到了这篇 KBase 文章,但对于其他任何人:http://support.microsoft.com/kb/q177665/。适用于:部分显示了从 NT 3.51 一直到 Vista 和 Server 2003 的预期行为。

至于解决方法,我也遇到过类似的情况,但我们会放弃避免使用查询字符串参数的尝试,但还是这样做了。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

@Haacked:

Phil,您提到这是 aspnet_isapi.dll 的问题。不是说在IIS7集成管道模式下不应该存在这个问题吗?

不过,据我所知,(http://forums.iis.net/t/1105360.aspx) 仍然如此。

我也遇到了同样的问题,感觉有点受不了。似乎 ASP.NET 路由受到影响。因此,任何 ASP.NET MVC 应用程序的 URL 都必须短于 260,之后它必须恢复为查询字符串,这似乎是一个完整的 180!

(抱歉回答评论...还没有足够的代表发表评论:()

【讨论】:

【参考方案6】:

注册表项 UrlSegmentMaxLength 可用于增加传入 HTTP 请求中每个 Url 段的默认 Windows 最大 260 个字符:

密钥:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters 值:UrlSegmentMaxLength 类型:REG_DWORD 数据:(您所需的新 URL 段最大允许长度,例如 4096)

允许的最大值为 32766。如果指定了更大的值,它将被忽略。 (来源:胡安·门德斯)

有关 http.sys 设置的更多信息: http://support.microsoft.com/kb/820129

需要重新启动 PC 才能使对此设置的更改生效。 (图片来源:David Rettenbacher、Juan Mendes)

此答案的原始来源:https://***.com/a/7817739/12484

【讨论】:

【参考方案7】:

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

【讨论】:

以上是关于ASP.NET url MAX_PATH 限制的主要内容,如果未能解决你的问题,请参考以下文章

Boost.Filesystem 中的 MAX_PATH 限制

支持 JSONP 的 ASP.NET 通用 HTTP 处理程序 (.ashx)

七天学会ASP.NET MVC ——线程问题异常处理自定义URL

如何使用ASP.NET MVC增加对AJAX JSON响应的2MB限制

ASP.NET使用WebMethod

Java如何规避windows MAX_PATH WinAPI限制