HttpHandler没有被调用

Qua*_*ngo 10 asp.net httphandler iis-express

我需要编写一个HttpHandler,它将提供JavaScript文件,这些文件是我项目中.DLL中嵌入的资源.视图中的引用无法直接看到这样的资源,因此我计划使用HttpHandler模​​块,该模块将使用path/js/[file]拦截任何请求,找到匹配的嵌入文件并返回脚本.

问题是我的HttpHandler代码从未被调用过,尽管在web.config部分尝试了很多不同的设置.我显然错过了一些东西,但没有错误信息,我看不出那是什么.我得到的只是来自静态文件处理程序的404.

Q1)我错过了一些明显的东西吗?

Q2)有没有办法让IIS告诉我它为什么不调用我的处理程序?

简介:我正在IIS Express(v8)上测试ASP.NET MVC 4应用程序.

我创建了一个实现IHttpHandler的简单库,并在我的测试MVC应用程序中添加了对此的引用,以及web.config中的以下行:

  <system.webServer>
    <validation validateIntegratedModeConfiguration="true" />
    <handlers>
      <add name="ejs" path="js/*" verb="*" type="EmbeddedJsHandler.EmbeddedJsHandler, EmbeddedJsHandler" preCondition="integratedMode" />
Run Code Online (Sandbox Code Playgroud)

图书馆就在那里,但它从未被调用过.任何使用/js/test.js或其他任何请求都会导致404错误.

到目前为止,我已经在处理程序代码中尝试了许多不同的配置和设置.我试过preCondition,resourceType ="Unspecified",modules ="IsapiModule"scriptProcessor ="%windir%\ Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll"

我试过路径:

  js/*.js
  js/* 
  js/*.*

我已经检查了正在使用的集成模式设置部分(在system.webServer中),并确认它是.

我已经搜索了类似情况的堆栈溢出,并尝试了许多可能的解决方案..仍然没有快乐.

甚至Jon Skeet也有这些问题! 为什么不调用我的IHttpHandler?

Qua*_*ngo 26

最后偶然发现它 - 它是RouteConfig.cs文件中的缺少routes.IgnoreRoute() - MVC路由引擎未配置为忽略此路径,因此将其传递给静态文件处理程序.

卫生署!

  • 我本来希望看到你为RouteConfig.cs添加的行.你还有机会吗? (3认同)
  • 谢谢,这解决了我的问题。@ToboldHornblower 这里是我的 RouteConfig.cs 中的行 - routes.IgnoreRoute("PaymentCallback.ashx"); (2认同)
  • 谢谢!这个失去了4个小时!但终于遇到了你的解决方案.谢谢你100次!:) (2认同)

Kap*_*wal 5

检查一下:

如何:注册HTTP处理程序:

要注册在集成模式下运行的IIS 7.0的HTTP处理程序:

  1. 编译HTTP处理程序类并将生成的程序集复制到应用程序根文件夹下的Bin文件夹中.

  2. 在应用程序的Web.config文件中,在system.webServer部分中创建一个处理程序元素.

以下示例显示如何注册响应SampleHandler.new资源请求的HTTP处理程序.处理程序被定义为程序集SampleHandlerAssembly中的类SampleHandler.

<configuration>
  <system.webServer>
    <handlers>
      <add name="SampleHandler" verb="*" 
        path="SampleHandler.new" 
        type="SampleHandler, SampleHandlerAssembly" 
        resourceType="Unspecified" />
    </handlers>
  </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

注:resourceType为属性执行的验证文件存在于IIS管理器中的IIS 6.0选项相同的功能.

对于在集成模式下运行的IIS 7.0,仅需要在处理程序元素中进行注册.