asp.net - IHttpHandler ProcessRequest 未被调用

标签 asp.net httphandler ihttphandler

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

我从这里修改了源代码(稍微):https://github.com/RickStrahl/Westwind.Globalization让它工作。

这个概念很简单。当我最初访问某个页面(例如 Default.aspx)时,ProcessRequest两者均被调用 <script />通过调用加载到文件中的标签:

JavaScriptResourceHandler.RegisterJavaScriptGlobalResources (this, "GlobalResources", "App_GlobalResources\\Global");
JavaScriptResourceHandler.RegisterJavaScriptLocalResources (this, "LocalResources");

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

<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 足够基本:

<system.webServer>
    <handlers>
        <add name="JavaScriptResourceHandler" verb="GET" path="JavascriptResourceHandler.axd"
            type="Westwind.Globalization.JavaScriptResourceHandler,Westwind.Globalization" />
    </handlers>
</system.webServer>

我也尝试过设置IsReusable为 false 但没有任何效果。其他对 HttpHandlers 有更多经验的人有什么想法吗?

最佳答案

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

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;成功了。

关于asp.net - IHttpHandler ProcessRequest 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25124129/

相关文章:

asp.net - 用户控件事件不会在 Httphandler 中触发

java - 使用 HTTPHandler 上传文件

c# - HttpHandler isReusable,true 或 false 一次发送约 75 封电子邮件

c# - 文件下载后更新页面

c# - 如何在 Web Api 中使用 Httpclient 并响应 Ok 获取对象

c# - 如何找到两组不连续时间的交集?

asp.net - 用于检索大量二进制图像的 .ashx 处理程序的性能

javascript - 这是 C# ASP.NET 通用处理程序冗余变量中的主要错误吗?

html - 将 CSS 应用于页面上的特殊字符

c# - .NET 2.0 中的安全协议(protocol) Tls 1.2