为什么不调用我的IHttpHandler?

时间:2009-09-04 19:57:51

标签: asp.net ihttphandler

我正在尝试使用自定义处理程序来处理ASP.NET 3.5中的特定URL(或一组URL)。

处理程序实际上并没有做任何重要的事情 - 它只是记录请求。我可以发布代码,如果有任何相关的东西,但我真的不认为它被调用。 (特别是,对于正常的异常,我得到一个自定义错误页面并记录...这里我只是得到了香草IIS 404。)

以下是web.config文件的相关位:

<system.web>
  <httpHandlers>
    <add verb="GET,POST" path="*.robot" validate="false" 
         type="CSharpInDepth.Wave.RobotHandler, CSharpInDepth"/>
  </httpHandlers>
</system.web>

(显然该部分还有其他内容,但我不认为它是相关的。)

在本地,在dev服务器下运行,它运行正常。在我的真实盒子上,我总是得到一个404.网站目录下的一切都是一样的(通过svn复制)。这包括bin目录,其中包含CSharpInDepth.dll,我已验证其中包含CSharpInDepth.Wave.RobotHandler

我尝试抓取http://csharpindepth.com/foo.robot并获得404。

我尝试过使用和不使用程序集名称,特定URL或通配符......没有任何工作。

我确定我在IIS配置中的某个地方错过了一些简单的标志,但是如果我能找到它的话我就会被打败......

编辑:这是IIS版本6.现在尝试将* .robot添加到ISAPI过滤器...

2 个答案:

答案 0 :(得分:33)

如果主机盒是集成管道中的IIS7,您需要将其添加到配置的其他位:

<system.webmodules>
  ....
  <modules>
    <add name="RobotHandler" type="CSharpInDepth.Wave.RobotHandler, CSharpInDepth"/>
  </modules>
  ....
</system.webmodules>

如果是IIS6,那么您需要将* .robots映射到ASP.NET ISAPI DLL。

(对于非Skeets,您可以按照以下方式执行此操作)

  1. 打开IIS管理员。
  2. 右键单击 要配置的网站 并选择属性表格 上下文菜单。这将显示 “网站属性”对话框。
  3. 选择 主目录选项卡,然后单击 配置按钮。这将 显示应用程序 配置对话框。
  4. 点击 加。
  5. 选择aspnet_isapi.dll 从.NET框架目录, 您想要映射的扩展名和 要么是所有动词,要么只是那些 你想要映射。
  6. 点击确定。

答案 1 :(得分:9)

乔,

您必须配置IIS脚本映射以将* .robot传递给aspnet_isapi.dll。