2011-04-11 3 views
0

J'ai écrit un gestionnaire HTTP qui produit du contenu en fonction des valeurs transmises au gestionnaire. J'essaie de l'étendre afin qu'il produise des flashs, mais pour ce faire, je dois également utiliser un fichier javascript. Le fichier javascript est lui-même une ressource incorporée dans une autre assemblée, donc je suis en train de ce qui suit:Servir le fichier javascript via http Handler

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"); 

    } 

Cependant, je reçois l'erreur:

Impossible de jeter l'objet de type « Handlers.GenericContentHandler » à tapez 'System.Web.UI.Page'.

Existe-t-il un moyen d'y parvenir? Je ne peux pas utiliser un standard src =/swfobject.js parce que le fichier de script est une ressource incorporée.

Ou un module serait-il une meilleure implémentation?

Merci à l'avance higgsy

Répondre

1

Vous obtenez InvalidCastException parce que votre tentent de convertir votre gestionnaire actuel (ashx) au type de page. Je ne suis pas certain de ce que vous voulez retourner dans le cas de flash - Je suppose que vous voulez probablement retourner une page html avec l'objet flash incorporé dans et avec le fichier js inclus dans l'en-tête. Donc, vous devez émettre tel html où vous incluriez un lien vers le fichier js. Maintenant, comme vous n'avez pas js sur le système de fichiers, votre lien devrait pointer vers un autre gestionnaire qui extrairait le code js de l'assemblage incorporé et le retournerait. Heureusement, ce gestionnaire est déjà disponible (WebResourceLoader) et vous pouvez l'utiliser ci-dessous pour obtenir l'URL nécessaire:

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

Trick est que parce que vous n'avez pas gestionnaire de script client dans le gestionnaire générique, vous créez simplement une nouvelle page instance et l'utiliser.

+0

Salut Vinay - génial, vous avez absolument raison, je regardais cela de la mauvaise façon - les gestionnaires sont l'un des domaines de .NET que je n'ai pas passé beaucoup de temps à travailler avec. Merci beaucoup - vous avez résolu mon problème en une seule réponse. Excellent! – higgsy