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

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. ajax XML

    <script src="jquery-1.11.2.min.js"></script> </head> <body> <se ...

  2. 程序的删除kill、killall

    发送信号给程序,或者列出信号集 SYNOPSIS        kill [-s SIGNAL | -SIGNAL] PID...        kill -l [SIGNAL]...   1.信号操 ...

  3. Spring 定时执行任务

    好不容易写了半天的文章竟然由于断网而丢失了,并未自动保存到草稿箱.只能简单的贴贴代码了. <?xml version="1.0" encoding="UTF-8&q ...

  4. C# 使用Newtonsoft.Json.dll 格式化显示Json串

    private string ConvertJsonString(string str) { //格式化json字符串 JsonSerializer serializer = new JsonSeri ...

  5. Fedora20安装fcitx输入法

    Fedora20安装fcitx输入法 Fedora20默认安装的是ibus输入法,总有一些原因让我们选择fcitx输入法: ibus出词顺序有bug 在输入人名的时候,有些名字输入两三次后还是不会出现 ...

  6. 声明、定义 in C++

    序 声明和定义是我们使用的基础,但是对于声明和定义的概念,我们不甚了了,也就是说感觉好像是这样,但是真要详细说明就说不上来. 有博主对于声明和定义有以下描述:          1.需要建立存储空间的 ...

  7. js 去掉字符串前后空格

    //去左空格; function ltrim(s){ return s.replace(/(^\s*)/g, ""); } //去右空格; function rtrim(s){ r ...

  8. 让IE8支持HTML5及canvas功能!chart.js图表绘制工具库IE8上兼容方案

    第一步,我们加上对html5的支持. <!--[if IE]> <script src="/public/html5.js" type="text/ja ...

  9. Jmeter应用初步介绍

    一.工具介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试静态和动态资 ...

  10. 第一章 zookeeper基础概念

    1.ZooKeeper是什么 ZooKeeper为分布式应用提供了高效且可靠的分布式协调服务,提供了统一命名服务. 配置管理和分布式锁等分布式的基础服务.在解决分布式数据一致性方面, ZooKeepe ...