C# 添加用于IP日志记录的HTTP模块

C# 添加用于IP日志记录的HTTP模块,c#,asp.net,C#,Asp.net,我对如何正确添加HTTP处理程序感到困惑,尤其是在web.config文件中 我有这个: public class MySessionHandler : IHttpHandler { public bool IsReusable { get { return false; } } public void ProcessRequest(HttpContext context) { context.Response.Write("my custom hand

我对如何正确添加HTTP处理程序感到困惑,尤其是在web.config文件中

我有这个:

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

    public void ProcessRequest(HttpContext context)
    {
        context.Response.Write("my custom handler.");
    }
}
我需要在web配置文件中添加什么,以便在每个请求中执行该配置。基本上,我有一个LINQtoSQL查询,它存储每次我想要执行的每个请求的IP地址。现在,它位于母版页的页面加载事件上,但我想使用HTTP处理程序

另外,如果我这样做,当我使用jQuery.ajax调用调用服务器时,是否会执行此操作


谢谢?

您可以做的最简单的事情是从“新建项目…”对话框中添加一个“通用处理程序”。您将向项目中添加一个具有ashx扩展名的文件,该文件将在其“代码隐藏”handler.ashx.cs中定义相同的类


可寻址为:~\handler.ashx

处理程序映射到指定的文件扩展名。如果希望为每个请求执行某些操作,则需要一个HttpModule。还有更多


为扩展(如.ajax)注册处理程序取决于您运行的IIS版本

您可以实现一个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
    }
}
//
///MyModule的摘要说明
/// 
公共类MyModule:IHttpModule
{
公共空间处置()
{
抛出新的NotImplementedException();
}
公共void Init(HttpApplication上下文)
{
context.BeginRequest+=新事件处理程序(context_BeginRequest);
}
私有void上下文_BeginRequest(对象发送方,事件参数e)
{
HttpApplication=(HttpApplication)发送方;
HttpContext=application.context;
字符串ip=context.Request.UserHostAddress;
//…记录IP地址的代码
}
}
。。。然后在web.config中:

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


好的,太好了,这正是我想要的。它是否也适用于ajax请求?非常感谢,你的答案很快就会有一个好的谷歌页面排名!!是的,每个请求都会引发BeginRequest事件,包括ajax请求。抱歉,我不知道这是您想要做的。其他请求可能是更好的方法。我的只是演示了如何在没有额外配置的情况下生成“处理程序”;我将详细研究处理程序。它们通常用于什么?我将它们用于异步文件下载,或用于“导出为[格式]…”。它基本上支持对服务器的异步请求,返回html.Ah以外的其他内容类型,例如,当用户想要下载.csv文件导出时;然后生成csv文件,将其另存为发送给浏览器的名称,然后浏览器以文件名作为参数回调处理程序,处理程序以正确的csv文件答复。这是一个好方法吗?这是基本的想法。如果您使用的是可以在内存中生成的文件类型,则不必将其保存到磁盘。相反,您可以将字节流式传输到响应缓冲区,并为其指定默认名称