通过 http Handler 提供 javascript 文件

发布于 2024-10-31 17:00:03 字数 710 浏览 1 评论 0原文

我编写了一个 HTTP 处理程序,它根据传递给处理程序的值输出内容。我正在尝试扩展它,以便它也输出 flash,但是要做到这一点,我还需要提供一个 javascript 文件。 javascript 文件本身是另一个程序集中的嵌入资源,因此我尝试执行以下操作:

    public void ProcessRequest(HttpContext context) {

        ((System.Web.UI.Page)context.CurrentHandler).ClientScript.RegisterClientScriptInclude("swfobject", ((System.Web.UI.Page)context.CurrentHandler).ClientScript.GetWebResourceUrl(typeof(MyAssembly.Load), "MyResourceAssembly.swfobject.js"));

        context.Response.Write("Hello world");

    }

但是,我收到错误:

无法将“Handlers.GenericContentHandler”类型的对象强制转换为“System.Web.UI.Page”类型。

有办法实现这一点吗?我无法使用标准 src=/swfobject.js 因为脚本文件是嵌入式资源。

或者模块会是更好的实现吗?

提前致谢 希格斯

I've written a HTTP Handler that outputs content depending on values passed to the handler. I am trying to extend it so that it outputs flash aswell, however to do so I need to also serve a javascript file. The javascript file itself is an embedded resource in another assembly, so I am trying the following:

    public void ProcessRequest(HttpContext context) {

        ((System.Web.UI.Page)context.CurrentHandler).ClientScript.RegisterClientScriptInclude("swfobject", ((System.Web.UI.Page)context.CurrentHandler).ClientScript.GetWebResourceUrl(typeof(MyAssembly.Load), "MyResourceAssembly.swfobject.js"));

        context.Response.Write("Hello world");

    }

However, I am getting the error:

Unable to cast object of type 'Handlers.GenericContentHandler' to type 'System.Web.UI.Page'.

Is there a way of acheiving this? I cant use a standard src=/swfobject.js because the script file is an embedded resource.

Or would a module be a better implementation?

Thanks in advance
higgsy

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

喜爱纠缠 2024-11-07 17:00:04

您收到 InvalidCastException 是因为您正在尝试将当前处理程序 (ashx) 转换为页面类型。

我不确定你想在 flash 情况下返回什么 - 我假设你可能想返回一个 html 页面,其中嵌入了 flash 对象,并在标头中包含了 js 文件。因此,您需要发出这样的 html,其中包含 js 文件的链接。现在,由于文件系统上没有 js,因此您的链接应该指向另一个处理程序,该处理程序将从嵌入式程序集中提取 js 代码并返回它。幸运的是,这样的处理程序已经可用(WebResourceLoader),您可以在下面使用它来获取所需的 url:

(new Page()).ClientScript.GetWebResourceUrl(typeof(MyAssembly.Load), "MyResourceAssembly.swfobject.js");

技巧是,因为您在通用处理程序中没有客户端脚本管理器,所以您只需创建一个新的页面实例并使用它即可。

You get InvalidCastException because your are trying to convert your current handler (ashx) to the page type.

I am not certain what you want to return in flash case - I am assuming that you probably want to return an html page with flash object embedded within and with js file included in header. So you need to emit such html where you would include link to the js file. Now, as you don't have js on file system, your link should point to yet another handler that would extract the js code from embedded assembly and return it. Luckily such handler is already available (WebResourceLoader) and you can use it below to get the needed url:

(new Page()).ClientScript.GetWebResourceUrl(typeof(MyAssembly.Load), "MyResourceAssembly.swfobject.js");

Trick is that because you don't have client script manager in generic handler, you simply create a new page instance and use that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文