使用HttpHanlder处理404:File not found的问题

 更新时间:2013年04月23日 09:24:28   作者:  
本篇文章小编为大家介绍。使用HttpHanlder处理404:File not found的问题。需要的朋友参考下

一:场景

出于某种理由,需要由asp.net引擎处理所有可能出现的无效URL的Request。

二:现状

对于无效URL,一般会由IIS返回404错误。当然,也可以自定义Custom Error Page,但是在这种情况下,并不能处理原URL所代表的Request的数据(如表单数据)。或许我们想直接在Application_BeginRequest中处理该请求,但是,如果我们的IIS已经处理了“Verify that file Exists”,则实际上该请求根本不会被Application_BeginRequest命中(Fire)。

三:解决方案

1:准备好web.config,进行如下配置:

复制代码 代码如下:

<location path="FolderTest">
  <system.web>
    <httpHandlers>
      <add verb="*" path="*" type="YourNamespace.YourHandler"/>
    </httpHandlers>
  </system.web>
  <system.webServer>
    <handlers>
      <add name="testyou" verb="*" path="*" type="younamespace.youHandler" resourceType="Unspecified"/>
    </handlers>
  </system.webServer>
</location>

有几点需要说明:

1)熟悉system.web和system.webServer的朋友一定知道,后者是针对iis7及以上的集成模式的配置项,如果不满足此宿主条件,则IIS会自动忽略此配置,采用前者的配置节点。

2)经过此配置后,iis7及以上的集成模式的站点已经能够处理FolderTest路径下的所有404 Request了。

3)resourceType="Unspecified",是用来处理标示处理所有请求的,包括file and folder等等,如果我们处理的是文件url,则不需要此配置属性。

4)path=”*”,表明这是一个wildcard httphandler。

5)如果我们不是要处理子目录下所有请求,如上文配置中的FolderTest,而是要处理根目录下的所有404请求,则去掉location配置节。

2:现在来处理iis7及以上的集成模式的情况

比如,不幸我们还在使用II6,则应该在IIS中配置“Verify that file Exists”为非构选状态。以iis6为例,我们可进行如下操作:

1:)打开站点配置节点 

IIS Web Site Properties Dialog

点击Configuration之。

2:)然后,在出现的界面中的下半部分,即“Wildcard application maps”部分,点击“Insert”,出现如下图:

IIS Wildcard Application Extension Mapping Dialog

把aspnet_isapi.dll配置进去,然后不要钩选“Verify that file exists”,OK之。 

至此,整个世界清静了。你可以在你的HttpHandler中处理任何想要的Request的数据了,比如表单数据,哪怕客户端提交的是一个不存在的URL。

相关文章

  • C#中把Json数据转为DataTable

    C#中把Json数据转为DataTable

    这篇文章介绍了C#中把Json数据转为DataTable的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C# 减少嵌套循环的两种方法

    C# 减少嵌套循环的两种方法

    最近在解决性能优化的问题,看到了一堆嵌套循环,四五层级的循环真的有点过分了,在数据量成万,十万级别的时候,真的非常影响性能。本文介绍了C# 减少嵌套循环的两种方法,帮助各位选择适合自己的优化方案,优化程序性能
    2021-06-06
  • 自动输出类的字段值实用代码分享

    自动输出类的字段值实用代码分享

    有点时候在测试的时候希望打印输出返回对象的各字段的值,采用下面的代码可以很方便的列出对象的各字段值
    2013-12-12
  • C#中ManualResetEvent用法详解

    C#中ManualResetEvent用法详解

    这篇文章主要为大家详细介绍了C#中ManualResetEvent用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • C#获取本地IP的四种方式示例详解

    C#获取本地IP的四种方式示例详解

    这篇文章主要介绍了C#获取本地IP的四种方式示例详解, 文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • C# CultureInfo之常用InvariantCulture案例详解

    C# CultureInfo之常用InvariantCulture案例详解

    这篇文章主要介绍了C# CultureInfo之常用InvariantCulture案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C#中把任意类型的泛型集合转换成SQLXML数据格式的实例

    C#中把任意类型的泛型集合转换成SQLXML数据格式的实例

    本文主要分享了C#中把任意类型的泛型集合转换成SQLXML数据格式的实例代码。具有很好的参考价值,需要的朋友可以看下
    2016-12-12
  • 解析C#多线程编程中异步多线程的实现及线程池的使用

    解析C#多线程编程中异步多线程的实现及线程池的使用

    这篇文章主要介绍了C#多线程编程中异步多线程的实现及线程池的使用,同时对多线程的一般概念及C#中的线程同步并发编程作了讲解,需要的朋友可以参考下
    2016-03-03
  • c# 类型构造器

    c# 类型构造器

    CLR还支持类型构造器,也称为静态构造器。c#类型构造器可应用引用类型和值类型,永远没有参数
    2012-10-10
  • C#/VB.NET实现创建PDF/UA文件的示例代码

    C#/VB.NET实现创建PDF/UA文件的示例代码

    PDF/UA,即Universally Accessible PDF,该格式的PDF文件是于2012年8月以ISO标准14289-1发布的、具有普遍可访问的PDF文档标准。本文将用C#实现DF/UA文件的创建,需要的可以参考一下
    2022-08-08

最新评论