使用HttpHanlder处理404:Filenotfound的问题
一:场景
出于某种理由,需要由asp.net引擎处理所有可能出现的无效URL的Request。
二:现状
对于无效URL,一般会由IIS返回404错误。当然,也可以自定义CustomErrorPage,但是在这种情况下,并不能处理原URL所代表的Request的数据(如表单数据)。或许我们想直接在Application_BeginRequest中处理该请求,但是,如果我们的IIS已经处理了“VerifythatfileExists”,则实际上该请求根本不会被Application_BeginRequest命中(Fire)。
三:解决方案
1:准备好web.config,进行如下配置:
<locationpath="FolderTest">
<system.web>
<httpHandlers>
<addverb="*"path="*"type="YourNamespace.YourHandler"/>
</httpHandlers>
</system.web>
<system.webServer>
<handlers>
<addname="testyou"verb="*"path="*"type="younamespace.youHandler"resourceType="Unspecified"/>
</handlers>
</system.webServer>
</location>
有几点需要说明:
1)熟悉system.web和system.webServer的朋友一定知道,后者是针对iis7及以上的集成模式的配置项,如果不满足此宿主条件,则IIS会自动忽略此配置,采用前者的配置节点。
2)经过此配置后,iis7及以上的集成模式的站点已经能够处理FolderTest路径下的所有404Request了。
3)resourceType="Unspecified",是用来处理标示处理所有请求的,包括fileandfolder等等,如果我们处理的是文件url,则不需要此配置属性。
4)path=”*”,表明这是一个wildcardhttphandler。
5)如果我们不是要处理子目录下所有请求,如上文配置中的FolderTest,而是要处理根目录下的所有404请求,则去掉location配置节。
2:现在来处理iis7及以上的集成模式的情况
比如,不幸我们还在使用II6,则应该在IIS中配置“VerifythatfileExists”为非构选状态。以iis6为例,我们可进行如下操作:
1:)打开站点配置节点
点击Configuration之。
2:)然后,在出现的界面中的下半部分,即“Wildcardapplicationmaps”部分,点击“Insert”,出现如下图:
把aspnet_isapi.dll配置进去,然后不要钩选“Verifythatfileexists”,OK之。
至此,整个世界清静了。你可以在你的HttpHandler中处理任何想要的Request的数据了,比如表单数据,哪怕客户端提交的是一个不存在的URL。
相关文章
- 客户端和服务器不支持一,客户端和服务器不支持常用的 SSL 协议版本或加密套件。导致此问题的原因通常是服务器要求使用 SSLv3…
- vue07登陆注册--跨域请求问题+ base64编码+axios使用+面试题【v-bind和v-modul和{{}}的区别】
- 跨域问题浅析
- 【Java AWT 图形界面编程】Canvas 组件中使用 Graphics 绘图 ④ ( AWT 绘图窗口闪烁问题 )
- 要不要入职?是时候考虑这个问题了!
- 问题 1484: [蓝桥杯][算法提高VIP]Quadratic Equation
- 处理使用Java解决Redis过期处理问题(redisjava过期)
- 使用Redis与Java解决过期问题(redisjava过期)
- 时间解决Java中Redis过期时间设置问题(redisjava过期)
- 解决 Linux 中编译软件卸载问题(linux卸载编译软件)
- Epiphany是Gnome默认的浏览器,主要希望用户能关注其内容而不是浏览器本身。安装Epiphany时,你就会为其表现惊艳。同时记得安装Epiphany拓展软件包,可以使用很多插件和工具。但是Epiphany在观看Flash或JavaScript网站时会遇到问题,不过相信这一点很快就会得到解决。
- 停止Oracle服务:解决超时性能问题(oracle停止服务)
- MySQL端口查询:快速定位网络连接问题(mysql端口查询)
- 使用SQLServer电子版轻松解决数据存储问题(sqlserver电子版)
- MySQL中使用C语言处理长连接的技巧(c mysql长连接问题)
- 处理 MySQL 变量时遇到问题了解为什么不能使用变量(mysql 不能用有变量)
- 使用Redis时注意资源竞争问题(redis资源竞争问题)
- 解决FireFox下[使用event很麻烦]的问题
- c#解决IIS写Excel的权限问题
- 解析使用substr截取UTF-8中文字符串出现乱码的问题
- Macos解决无法使用localhost连接mysql问题