我需要编写一个HttpHandler来提供JavaScript文件,这些文件是我项目中.DLLs中的嵌入式资源。 View 中的引用无法直接看到此类资源,因此我计划使用HttpHandler模块,该模块将拦截路径为/js/[file]的任何请求,找到匹配的嵌入式文件并返回脚本。
问题是,尽管尝试了web.config部分中的许多不同设置,但从未调用我的HttpHandler代码。我显然缺少了一些东西,但是没有错误消息,我看不到那是什么。我所得到的只是静态文件处理程序中的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" />
该库在那里,但从未调用过。使用/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)都遇到了这类问题!
Why isn't my IHttpHandler being called?
最佳答案
最终意外地发现了它-这是缺少的route.RouteConfig.cs文件中的IgnoreRoute()-MVC路由引擎未配置为忽略此路径,因此将其传递给静态文件处理程序。
h!