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 因为脚本文件是嵌入式资源。

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

在此先感谢希格斯

4

1 回答 1

1

你得到InvalidCastException是因为你试图将你当前的处理程序(ashx)转换为页面类型。

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

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

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

于 2011-04-11T13:02:03.437 回答