C# 添加用于IP日志记录的HTTP模块
我对如何正确添加HTTP处理程序感到困惑,尤其是在web.config文件中 我有这个: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
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文件答复。这是一个好方法吗?这是基本的想法。如果您使用的是可以在内存中生成的文件类型,则不必将其保存到磁盘。相反,您可以将字节流式传输到响应缓冲区,并为其指定默认名称