为什么不调用我的IHttpHandler?

Jon*_*eet 26 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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

blo*_*art 33

好吧,如果主机盒是集成管道中的IIS7,你需要将它添加到配置的另一位:

<system.webmodules>
  ....
  <modules>
    <add name="RobotHandler" type="CSharpInDepth.Wave.RobotHandler, CSharpInDepth"/>
  </modules>
  ....
</system.webmodules>
Run Code Online (Sandbox Code Playgroud)

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

(对于非Skeets,你这样做如下)

  1. 打开IIS管理员.
  2. 右键单击要配置的网站,然后从上下文菜单中选择"属性".这将显示"网站属性"对话框.
  3. 选择"主目录"选项卡,然后单击"配置"按钮.这将显示"应用程序配置"对话框.
  4. 单击添加.
  5. 从.NET framework目录中选择aspnet_isapi.dll,要映射的扩展名为All Verbs,或者只是要映射的扩展名.
  6. 点击确定.


Joh*_*ers 9

乔恩,

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