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

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. Java2OP

    Java2OP D:\Program Files (x86)\Embarcadero\Studio\18.0\bin\converters\java2op\Java2OP.exe Java2OP.ex ...

  2. innobackupex的安装

    innobackupex的安装方法有3种: 通过RPM包安装: 通过源码包安装: 通过二进制包安装. 第3种方法最简单,这里只介绍它.以下是安装步骤: 打开官方下载链接: Version默认是最新版本 ...

  3. Explode TArray

    function Explode(const Separator, S: string; Limit: Integer = 0): TArray;var SepLen : Integer; F, P ...

  4. html a tag's href javascript issue

    a标签的href中写js中遇到的问题(ie中有问题,chrome没问题) <a class="free" href="javascript:{$('#suiteTy ...

  5. 快速升级php5.6

    !!yum list installed | grep phpcd /etc/yum.repos.drpm -Uvh https://mirror.webtatic.com/yum/el6/lates ...

  6. 计算机病毒实践汇总四:netcat使用方法

    在尝试学习分析的过程中,判断结论不一定准确,只是一些我自己的思考和探索.敬请批评指正! 1. netcat概述 (1)特性 "TCP/IP协议栈瑞士军刀",可以被用在支持端口扫描. ...

  7. Erlang 从入门到精通(一) 下载安装

    我的电脑配置: 系统:win8.1  x64 内存:16G 在官网下载http://www.erlang.org/

  8. SAP无损耗,FP前台和回写均有2%损耗

    SAP前台显示无损耗 FP前台显示有损耗 回写也有损耗 检查:从SAP取数到FP表是没有损耗 1132物料编码的主数据也是没有损耗 检查:FP_MO2SAP存储过程

  9. 【python3】collections系列介绍

    文章来源:http://www.jb51.net/article/48771.htm (http://www.cnblogs.com/wushank/p/5122786.html) 修改人:天马流行拳 ...

  10. LeetCode OJ 147. Insertion Sort List

    Sort a linked list using insertion sort. Subscribe to see which companies asked this question 解答 对于链 ...