0

ハンドラーに渡された値に応じてコンテンツを出力する HTTP ハンドラーを作成しました。フラッシュも出力するように拡張しようとしていますが、そのためには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) をページ タイプに変換しようとしているためです。

フラッシュの場合に何を返したいのかわかりません-おそらく、フラッシュオブジェクトが埋め込まれたhtmlページと、ヘッダーに含まれるjsファイルを返したいと思います。そのため、js ファイルへのリンクを含めるような html を発行する必要があります。ここで、ファイル システムに js がないため、リンクは、埋め込まれたアセンブリから js コードを抽出して返す別のハンドラーを指す必要があります。幸いなことに、そのようなハンドラーは既に利用可能 (WebResourceLoader) であり、以下でそれを使用して必要な URL を取得できます。

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

トリックは、ジェネリック ハンドラーにクライアント スクリプト マネージャーがないため、単純に新しいページ インスタンスを作成してそれを使用することです。

于 2011-04-11T13:02:03.437 に答える