27

我正在尝试让自定义处理程序适用于 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>

(显然该部分中还有其他内容,但我认为这无关紧要。)

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

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

我已经尝试过使用和不使用程序集名称、特定 URL 或通配符......没有任何效果。

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

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

4

2 回答 2

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. 从 .NET 框架目录中选择 aspnet_isapi.dll、要映射的扩展名以及所有动词或仅要映射的动词。
  6. 单击确定。
于 2009-09-04T20:00:36.387 回答
9

乔恩,

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

于 2009-09-04T20:00:15.063 回答