首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IHttpHandler ProcessRequest未被调用

IHttpHandler ProcessRequest未被调用
EN

Stack Overflow用户
提问于 2014-08-04 17:17:48
回答 2查看 1.3K关注 0票数 2

在我的IHttpHandler应用程序中,我使用WebForms应用程序在执行时使用适当的本地化将.resx资源动态加载到javascript中。我在这里设置了一个演示项目,以供参考:https://www.dropbox.com/s/qoo9bm7qtzgvhbj/TestJs.zip

我从这里(稍微)修改了源代码:https://github.com/RickStrahl/Westwind.Globalization以使其正常工作。

这个概念很简单。当我最初点击一个页面(如Default.aspx )时,将调用ProcessRequest,用于通过调用以下方式加载到文件中的两个<script />标记:

代码语言:javascript
复制
JavaScriptResourceHandler.RegisterJavaScriptGlobalResources (this, "GlobalResources", "App_GlobalResources\\Global");
JavaScriptResourceHandler.RegisterJavaScriptLocalResources (this, "LocalResources");

这两个调用将这些标记添加到页面的<head />部分:

代码语言:javascript
复制
<script src="/JavaScriptResourceHandler.axd?ResourceSet=App_GlobalResources\Global&amp;LocaleId=en-US&amp;VarName=GlobalResources&amp;ResourceType=resx&amp;ResourceMode=1" type="text/javascript"></script>
<script src="/JavaScriptResourceHandler.axd?ResourceSet=Default.aspx&amp;LocaleId=en-US&amp;VarName=LocalResources&amp;ResourceType=resx&amp;ResourceMode=0" type="text/javascript"></script>

带有查询参数的简单HttpHandler调用。这适用于第一个页面加载,但是后续对具有相同脚本的其他页面的调用不会调用ProcessRequest。如果我在浏览器中手动地遵循正确的httpHandler地址,就会加载一个有效的脚本,但它与上一页加载的脚本相同,即使查询字符串不同。

我确信这一定是某种奇怪的缓存机制,但我不确定是什么。我的web.config已经足够基本了:

代码语言:javascript
复制
<system.webServer>
    <handlers>
        <add name="JavaScriptResourceHandler" verb="GET" path="JavascriptResourceHandler.axd"
            type="Westwind.Globalization.JavaScriptResourceHandler,Westwind.Globalization" />
    </handlers>
</system.webServer>

我还尝试将IsReusable设置为false,但没有效果。有没有其他对HttpHandlers有更多经验的人有一些想法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-04 19:05:35

事实证明,我是对的,只是忽略了在ProcessRequest中发生的缓存:

代码语言:javascript
复制
HttpCachePolicy cache = Response.Cache;

cache.VaryByParams["LocaleId"] = true;
cache.VaryByParams["ResoureType"] = true;
cache.VaryByParams["IncludeControls"] = true;
cache.VaryByParams["VarName"] = true;
cache.VaryByParams["ResourceMode"] = true;

对我来说,主要的变化是ResourceSet参数,所以简单地添加cache.VaryByParams["ResourceSet"] = true;就可以了。

票数 1
EN

Stack Overflow用户

发布于 2020-05-06 14:38:31

尝试web配置

用于经典应用程序池

代码语言:javascript
复制
  <system.web>    
    <httpHandlers>
      <add verb="*" path="*" type="Namespace.MyHttpHandler"/>
    </httpHandlers>
  </system.web>

用于集成应用程序池

代码语言:javascript
复制
  <system.webServer>    
    <handlers>
      <add name="myHttpHandler" verb="*" path="*" type="Namespace.MyHttpHandler"/>
    </handlers>
  </system.webServer>

一旦确认handler被调用,就可以适当地设置path属性和谓词属性,并检查处理程序是否被调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25124129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档