2011-06-23 6 views
2

特にweb.configファイルでHTTPハンドラを正しく追加する方法が混乱しています。私は、これはリクエストごとに実行されますようにWeb構成ファイルに格納する必要がありますどのようなIPロギングにHTTPモジュールを追加する

public class MySessionHandler : IHttpHandler 
{ 
    public bool IsReusable { get { return false; } } 

    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.Write("my custom handler."); 
    } 
} 

は、私はこれを持っています。基本的には、毎回実行されるすべてのリクエストのIPアドレスを格納するlinq-to-sqlクエリがあります。今のところ、マスターページのページロードイベントにありますが、HTTPハンドラを使用したいと思います。

また、これを行うと、jQuery .ajax呼び出しでサーバーを呼び出すときにこれが実行されますか?

ありがとうございます。

答えて

6

あなたはHttpModuleをを実装するなど、各リクエストに応じて火災、というHttpApplication.BeginRequestイベントにフックできます。

/// <summary> 
/// Summary description for MyModule 
/// </summary> 
public class MyModule : IHttpModule 
{ 
    public void Dispose() 
    { 
     throw new NotImplementedException(); 
    } 

    public void Init(HttpApplication context) 
    { 
     context.BeginRequest += new EventHandler(context_BeginRequest); 
    } 

    private void context_BeginRequest(object sender, EventArgs e) 
    { 
     HttpApplication application = (HttpApplication)sender; 
     HttpContext context = application.Context; 
     String ip = context.Request.UserHostAddress; 
     //... code to log IP address 
    } 
} 

...そして、あなたのweb.configファイル内:

OK
<httpModules> 
     <add name="IPAddressLogger" type="MyModule, MyAssembly"/> 
    </httpModules> 
+1

大丈夫、それはまさに私が探していたものです。それはまた、AJAXの要求のためにですか?ありがとう、あなたの答えはすぐに良いGoogleのページのランクを持っています! – frenchie

+1

はい、BeginRequestイベントは、ajaxリクエストを含むすべてのリクエストに対して発生します。 – Lasse

+0

よろしくお願いいたします。 – frenchie

1

あなたができる最も簡単なことは、 "New Item ..."ダイアログから "Generic Handler"を追加することです。 〜\ handler.ashx

+0

どのように要求ごとに実行するのですか? – frenchie

+0

申し訳ありませんが、あなたがしたいことが分かっていませんでした。他の要求はより良いアプローチかもしれません。私のほうは、追加の設定をせずに "ハンドラ"を作る方法を示しています。 –

+0

問題ありません。ハンドラを詳しく見ていきます。彼らは一般に何のためですか? – frenchie

4

ハンドラ:として

にアドレス指定を、あなたはASHX拡張子を持つプロジェクトにファイルを追加し、それはその「背後にあるコード」で定義された同じクラスになります、handler.ashx.cs指定されたファイル名の拡張子にマップされます。リクエストごとに何かを実行するには、HttpModuleが必要です。詳細はinformation on when to use an HttpHandler vs. an HttpModule hereです。

拡張子(.ajaxなど)のハンドラを登録するかどうかは、実行しているIISのバージョンによって異なります。 The MSDN documentation explains the different cases

+0

あなたの指摘に感謝します。 – frenchie

関連する問題