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

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

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

谢谢, 格雷格·巴拉德

【问题讨论】:

  • 模块正在修改 URL 并增加其长度?

标签: asp.net url isapi max-path


【解决方案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://stackoverflow.com/a/7817739/12484

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 2011-06-04
            • 2012-04-16
            • 2012-04-23
            • 1970-01-01
            • 2010-11-25
            • 2011-12-05
            • 1970-01-01
            • 2010-09-18
            • 2022-09-23
            相关资源
            最近更新 更多