Serve javascript file via http Handler
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.GetWebResou开发者_StackOverflow中文版rceUrl(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
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.
精彩评论