2011-08-12 5 views
0

ページリクエストに対してコードを一度実行しようとしています。このコードをGlobal.asaxのApplication_PreRequestHandlerExecuteメソッドに配置します。問題は、各ページリクエストに対して、おそらく10回以上呼び出されるということです。だから、質問はどのように私のコードを要求ごとに1回しか呼び出さないようにするのですか?私はApplication_PreRequestExecuteメソッドにこれを追加してみました:ページ要求ごとにコードを1回呼び出す方法

const string key = "scanning_forms"; 
object chack = HttpContext.Current.Items[key]; 
if (chack == null) 
{ 
    // Code I want to execute only once 
} 

問題は、チェックは常に偽である、何らかの理由でそれにもかかわらずです!何か案は?ちなみに、私はSitecoreを使用しています。私はそれが重要だとは思わない。

おかげで、

サチン

+2

これはページ上のすべての画像にも呼び出されていますか? –

+0

HttpContext.Current.Itemsに書き込むコードは実際には表示されていません。あなたは問題ではありませんか? – David

+0

いいえ、それは問題ではありません。 ifステートメントの最初のステートメントは、httpContextへの書き込みです。 – Sachin

答えて

1

あなたはセッション変数を設定し、それが存在するかどうかを確認することができます

しかし
if (Session["RequestMade"] == null) { 
    //Do logic 
    Session["RequestMade"] = true; 
} 

。私はあなたがこれをやっていなければならないと確信していません。あなたが達成しようとしていることについてさらに情報を提供してもらえますか?

0

このイベントは、リクエストごとに発生します。これは、あなたのページにある可能性のあるWebResource.axdリソースに対して発火することを意味します。

一度しか呼び出されないようにするには、HttpContext.Current.Items.Add(キー、何か)のようなことをしていますか?

+0

はい私は確かにaddメソッドを使用しています。 – Sachin

0

コードをApplication_BeginRequestに移動したい場合は、リクエストごとに1回発生させることをお勧めします。ライフサイクルの初期段階です。 http://www.techrepublic.com/article/working-with-the-aspnet-globalasax-file/5771721を参照してください。

あなたの意図が本当にページごとに1回であれば(リクエストを生成するイメージなど、そのページ上に別個のものではない)、要求ヘッダーを調べて、そのページに絞り込むために何が要求されているのかを判断できます。

1

私は、Kitのソリューションがうまくいくかどうかは完全にはわかりません(私は、リソース/ページ/ etcの要求は別々と考えています)。

リクエストがページ用であるかどうか(つまり、リクエストが* .aspxファイルのものかどうかを確認する、リクエストが処理されているかどうかを確認する) PageHandlerによる)

編集:

私は前にあなたのコードを実行するには、このようなチェックは)ハンドラのプロパティは、あなたのコードが実行されている時間によって移入されたと仮定すると(動作するはずだと思うでしょう:

if(HttpContext.Current.Handler is Page) 
1

HttpRequestパイプを変更します。 Sitecore用のWeb.Configのライン。シンプルなソリューションは、独自のパイプラインプロセッサを追加することです。ただし、このアプローチにはパフォーマンス上の考慮事項があります。別の考慮事項は、Sitecore項目のレイアウトの詳細でサブレイアウトまたはWebコントロールを使用することです。

0

私自身の開発で気づいたことの1つは、ビルトインデバッガを使用してVisual Studio内でASP.NETコードを実行すると、global.asaxファイルメソッドが画像およびCSSファイルとその他の非標準のファイルに対しても呼び出されるということです。サーバー側のファイルタイプ。ただし、コードをサーバーに展開すると、IISはこれを実行しません(一般的なセットアップで)。あなたは本番環境でこの問題を抱えていますか?またはあなたのローカルマシン上で?

問題が、すべてのイメージやその他のリソースに対してメソッドが呼び出されていることが判明し、引き続き問題が発生する場合は、ifブロックにコードをラップして、ASP上にいることを確認できます続行する前に.NETページ。このようなもの:

これは間違っている可能性があるので、これをタイプしました。また、C:\INETPUB\WWWROOT\MYSITE\Resources for .aspx files\images\banner.gifのようなファイルがあると、誤検出につながります。だから、あなたはおそらくチェックをより堅牢にしたいと思うだろう。私はあなたにそれを残すでしょう。

4

これはちょっと単純な問題を解決するための過度に複雑な解決策のようです。この#sitecoreにタグを付けたので、Sitecoreソリューションのコンテキストでこのソリューションが必要だと思います。

解決策には1つのレイアウトファイル(デバイスごとに1つ)が必要です。これは、すべてのページ要求ごとに実行されます。たとえば、Page_Load()にコードを記述します。

複数のレイアウトがある場合でも、共通の基本クラス(レイアウトなど)を作成し、各レイアウトコードファイルに継承させることができます。そして、上記のようにします。

+0

+1シンプルでポイントまで、おい! –

関連する問題