Googlebot引起了.NET System.Web.HttpException异常

14

我有一个混合了经典的ASP网站(我们正在进行.NET转换)并且最近升级到了.NET 4.0,并在IIS 7中切换到了集成管道。

自从这些更改后,ELMAH报告来自经典的ASP页面的错误几乎没有详细信息(并且状态代码是404):

System.Web.HttpException (0x80004005)
   at System.Web.CachedPathData.ValidatePath(String physicalPath)
   at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)

但是当我自己请求页面时,没有错误发生。所有这些出现在ELMAH中的错误都是由Googlebot爬虫(用户代理字符串)引起的。

.NET如何捕捉到经典ASP页面的错误?这与集成管线有关吗?

任何想法为什么只有在Google爬行页面时才会出现错误,或者如何获取更多细节来找到潜在的故障?


2
我也遇到了这个问题,尽管我在ASP.NET MVC页面上看到它们。 - Aaron D
4个回答

14

将以下内容添加到您的 web.config 文件中:

<httpRuntime relaxedUrlToFileSystemMapping="true" />

这个禁用默认检查以确保请求的URL符合Windows路径规则。

要重现问题,请在URL末尾添加%20(URL转义空格),例如:http://example.org/%20。当搜索爬虫遇到带有空格的链接时,例如<a href="http://example.org/ ">example</a>,很容易出现这个问题。

HttpContext.Request.Url属性似乎会修剪尾随的空格,这就是为什么像ELMAH这样的日志记录工具无法显示实际问题的原因。


1

当您从经典管道切换到集成管道时,实际上是将控制权交给了.NET,这意味着.NET将调用ASP解析器。这增加了使用.NET托管代码编写的自定义HTTP模块的能力,可以更改响应输出或在elmah的情况下提供日志详细信息。

我会查看日志,查看错误发生时googlebot使用的用户代理,并按照与更改用户代理相同的路径进行跟踪。

Mozilla Firefox是最适合此操作的浏览器,配合User Agent Switcher插件使用效果更佳。


0

这仅适用于使用Angular的情况,但如果您使用Angular,您将看到此内容。

<httpRuntime relaxedUrlToFileSystemMapping="false" /> (as mentioned in the previous answers)

如果您在图像或脚本标记上使用src而不是ng-src,即

<img src="{{SomeModelValue}}" />

应该是

<img ng-src="{{SomeModelValue}}" />

这也可能影响到使用 href 而不是 ng-href 的 A 标签。


0

看起来Google爬虫正在遍历一些不存在的链接。例如,您的网站上可能有一些文档引用了其他文档,但这些文档已被删除。

对我来说,这似乎不是很严重,因此您可以考虑过滤掉这个异常情况。


他说他可以自己请求页面,因此这些页面似乎仍然存在。 - Ocelot20

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