在博客程序的日志中经常会出现这样的错误日志:

Url: http://www.cnblogs.com/cmt/p/sokcet_memory_leak.html (这个URL仅是示例)
UserAgent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
System.Web.HttpException (0x80004005)
在 System.Web.CachedPathData.ValidatePath(String physicalPath)
在 System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)

从错误内容看,应该是请求的URL路径不对,可是通过Request.Url.AbsoluteUri记录的URL又是正确的,让人丈二和尚摸不着头脑。

这个问题存在已久,之前选择了默默地忍受。今天又看到这个错误,突然觉得甚是烦人,不想再忍受,于是决定查出问题真相,并将之消灭。

。。。

在Stackoverflow上的一个回答中找到了解决方法:

<httpRuntime relaxedUrlToFileSystemMapping="true" />

原来在默认情况下,ASP.NET会对请求的URL路径进行检查,如果不符合要求,就会抛出System.Web.HttpException (0x80004005)异常。

而我们遇到的问题场景是URL以空格结尾(%20),不符合ASP.NET的URL路径验证规则,于是抛出异常,并返回500错误。但是ASP.NET在抛出异常的同时,会自作聪明地将空格从路径中去掉,从而造成Request.Url得到的是去掉空格的URL,产生了误导信息,给分析问题形成了干扰。

对于文中开头的日志内容,Googlebot实际请求的URL是:http://www.cnblogs.com/cmt/p/sokcet_memory_leak.html%20。只要将relaxedUrlToFileSystemMapping设置为true,就能避开ASP.NET的URL路径合法性检查,让ASP.NET直接返回404错误。

然后可以通过URL重写,将错误的URL重定向至正确的URL,500错误转身变成了301重定向。URL重写规则示例如下:

<rule name="html_url_fix" enabled="true" stopProcessing="true">
<match url="([^.]+\.html)[^?#]+" />
<action type="Redirect" url="{R:1}" />
</rule>

既然用了URL重写,是不是可以不用多此一举——加relaxedUrlToFileSystemMapping="true"?但事实证明这样是不可取的,如果不加,访问时不会自动进行跳转,而是显示下面的页面:

这不知道是ASP.NET还是IIS干的勾当,为什么要出现这样不友好的提示页面,这里就不进行探查了。

所以,消灭这个问题的完美解决方法是:relaxedUrlToFileSystemMapping="true" + URL Rewrite。

消灭ASP.NET CachedPathData.ValidatePath引起的HttpException异常的更多相关文章

  1. [转]ASP.NET MVC Json()处理大数据异常解决方法 json maxjsonlength

    本文转自:http://blog.csdn.net/blacksource/article/details/18797055 先对项目做个简单介绍: 整个项目采用微软的ASP.NET MVC3进行开发 ...

  2. 在ASP.NET MVC中使用Log4Net记录异常日志,出错时导向到静态页

    本篇体验在ASP.NET MVC 4中使用Log4Net记录日志. 通过NuGet安装Log4Net. 需求是:当出错时导向到Error.html静态页面,Log4Net记录错误信息. 大致的思路是: ...

  3. ASP.NET Core错误处理中间件[3]: 异常处理器

    DeveloperExceptionPageMiddleware中间件错误页面可以呈现抛出的异常和当前请求上下文的详细信息,以辅助开发人员更好地进行纠错诊断工作.ExceptionHandlerMid ...

  4. 由ASP.NET Core根据路径下载文件异常引发的探究

    前言 最近在开发新的项目,使用的是ASP.NET Core6.0版本的框架.由于项目中存在文件下载功能,没有使用类似MinIO或OSS之类的分布式文件系统,而是下载本地文件,也就是根据本地文件路径进行 ...

  5. ASP.NET MVC Json()处理大数据异常解决方法,字符串的长度超过了为 maxJsonLength

    问题: 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值. <system.web.exten ...

  6. ASP.NET弹出显示ex.Message异常信息 存在换行符和回车符处理办法。

    1.把ex.Message换成任意字符串,检验在catch语句块中可以用Response.Write方法显示对话框.结果显示成功,说明问题就出在ex.Message上. 2.在程序中下断点,可以看到e ...

  7. asp.net mvc 4 json大数据异常 提示JSON字符长度超出限制的异常

    今天客户突然过来找我说在后台添加了一篇超长的文章后,所有后台的文章都显示不出来了.后台的前端显示是用easyui的,返回的数据全是用json.根据客户的描述进行了同样的操作后,在firebug下发现a ...

  8. Asp.Net MVC3(三)-MvcApp实现全局异常捕获

    定义异常捕获类: [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMu ...

  9. asp.net MVC FileResult在IE下异常的解决办法

    var encoding = System.Text.Encoding.UTF8; Response.Charset = encoding.WebName; Response.HeaderEncodi ...

随机推荐

  1. maven自动部署到远程tomcat教程

    使用maven的自动部署功能可以很方便的将maven工程自动部署到远程tomcat服务器,节省了大量时间. 本文章适用于tomcat的7.x ,8.x, 9.x版本. 下面是自动部的步骤 1,首先,配 ...

  2. avalon2学习教程12数据验证

    avalon2砍掉了不少功能(如ms-include,ms-data),腾出空间加了其他更有用的功能.数据验证就是其中之一.现在avalon2内置的验证指令是参考之前的oniui验证框架与jquery ...

  3. 手把手教你编写一个具有基本功能的shell(已开源)

    刚接触Linux时,对shell总有种神秘感:在对shell的工作原理有所了解之后,便尝试着动手写一个shell.下面是一个从最简单的情况开始,一步步完成一个模拟的shell(我命名之为wshell) ...

  4. 《深入理解Nginx》阅读与实践(四):简单的HTTP过滤模块

    一.Nginx的HTTP过滤模块特征 一个请求可以被任意个HTTP模块处理: 在普通HTTP模块处理请求完毕并调用ngx_http_send_header()发送HTTP头部或调用ngx_http_o ...

  5. openjudge ROADS

    726:ROADS 总时间限制: 1000ms 内存限制: 65536kB 描述 N cities named with numbers 1 ... N are connected with one- ...

  6. Android测试——adb命令

    Adb (Android Debug Bridge)起到调试桥的作用. 通过adb我们可以在Eclipse中方便通过DDMS来调试Android程序.adb采用监听Socket TCP 5554等端口 ...

  7. python学习笔记-Day6(1)

    shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式 >>> s=shelve.open('test') > ...

  8. ubuntu14安装java8

    http://ubuntuhandbook.org/index.php/2015/01/install-openjdk-8-ubuntu-14-04-12-04-lts/

  9. gvim 配置Pydiction

    配置windows下gvim 的python关键字补全插件Pydiction 1.下载Pydiction 2.解压缩包,里面有after文件夹.complete-dict.pydiction.py 3 ...

  10. Kendo UI for ASP.NET MVC 的一些使用经验(转)

    转自 http://blog.csdn.net/dj2008/article/details/45313805 最近的项目里用到了Kendo UI.这货很好很强大,但可惜官方文档组织的并不是很好,有很 ...