我发现了 ASP.NET 的一个问题,我知道这至少让其他人感到困惑。我们试图使用 HttpModule 来处理对 Web 应用程序的通配符请求。生成的 url 是动态的,可能有几百个字符长。不幸的是,aspnet_isapi.dll 文件中似乎存在一个限制,它将 url 中的路径长度限制为 MAX_PATH,它被硬编码为 260 个字符。
有没有其他人遇到过这个并找到绕过这个限制的方法?查询字符串参数不是一个选项。
谢谢,格雷格巴拉德
这是 aspnet_isapi.dll 的一个已知问题,目前没有解决方法。在内置 Visual Studio Webserver(又名 Cassini)中运行站点时没有看到此问题的原因是它都是托管代码并且不依赖于 aspnet_isapi.dll。
这将在 ASP.NET 的未来版本中得到解决。
我最终在 web.config 中使用以下内容使用 Mvc2 和 .Net Framework 4.0 解决了这个问题
<httpRuntime maxUrlLength="1000" relaxedUrlToFileSystemMapping="true" />
问题实际上在于 Windows,而不是 ASP.NET。Windows 已将 MAX_PATH 设置为 260,当 IIS 请求更长的文件名时,它将失败。您可能已经找到了这篇 KBase 文章,但对于其他任何人:http: //support.microsoft.com/kb/q177665/。适用于:部分显示这是从 NT 3.51 一直到 Vista 和 Server 2003 的预期行为。
至于解决方法,我遇到了类似的情况,但我们会放弃避免使用查询字符串参数的尝试,并且无论如何都这样做了。
感谢您的回答。虽然我没有找到那篇确切的文章,但我发现了类似的文章。但是,这不是 IIS 中的限制。您可以在请求中将更长的路径传递给 IIS,它会返回正确的响应。您可以通过尝试使用简单的 html 页面进行验证。该问题仅在使用 aspnet_isapi.dll 处理请求时出现。甚至 Visual Studio 中的集成调试服务器也可以处理比 260 更长的路径。
@Haacked:
Phil,您提到这是 aspnet_isapi.dll 的问题。这不是说在IIS7集成管道模式下不应该存在这个问题吗?
然而,据我所知,(http://forums.iis.net/t/1105360.aspx)它仍然存在。
我遇到了同样的问题,感觉有点受不了。似乎 ASP.NET 路由受到影响。因此,任何 ASP.NET MVC 应用程序的 URL 都必须短于 260,之后它必须恢复为查询字符串,这似乎是一个完整的 180!
(抱歉回答评论......还没有足够的代表发表评论:()
注册表项 UrlSegmentMaxLength 可用于增加传入 HTTP 请求中每个 Url 段的默认 Windows 最大 260 个字符:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters
UrlSegmentMaxLength
允许的最大值为 32766。如果指定了较大的值,将被忽略。(来源:胡安·门德斯)
有关 http.sys 设置的更多信息:http: //support.microsoft.com/kb/820129
需要重新启动 PC 才能使对此设置的更改生效。(来源:大卫·雷滕巴赫、胡安·门德斯)
您可以使用 URL 重写 ISAPI(例如IIRF)将 URL 重写为 aspnet_isapi 可以处理的内容。