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