使用HttpHandler为Asp.net WebForm 增加日志记录

这几天接到一个用户需求,需要为一个在运行的基于Asp.Net Web Form的老系统增加审计日志。对于用户访问的界面上的每个按钮,都需要记录下来访问的用户名、时间、IP地址。我们不能修改这个系统,最后决定采用HttpHandler处理这个问题,示例代码如下:

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Plat.LogHandler
{
    public class Handler : IHttpHandlerFactory
    {
        public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
        {
            PageHandlerFactory factory = (PageHandlerFactory)Activator.CreateInstance(typeof(PageHandlerFactory), true);
            try
            {
                IHttpHandler handler = factory.GetHandler(context, requestType, url, pathTranslated);
                if (handler is Page)
                {
                    Page page = handler as Page;

                    page.PreRenderComplete += new EventHandler(PreRenderComplete);
                    
                }
                

                return handler;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void ReleaseHandler(IHttpHandler handler)
        {
            
        }

        private void PreRenderComplete(object sender,EventArgs e)
        {
            var page = sender as Page;
            if (page != null && page.IsPostBack)
            {
                var btn = getPostBackControlName(page);
                if (btn != null)
                {
                    WriteLog(page.Title, btn.Text , btn.ID);
                }
            }
        }

        private Button getPostBackControlName(Page page)
        {
            
                Control c = null;
                foreach (string ctl in page.Request.Form)
                {
                    
                        c = page.FindControl(ctl);
                    
                    if (c is System.Web.UI.WebControls.Button )
                    {
                        return c as Button;
                    }
                }
            return null;

        }

    }
}

还需要在Web.config中进行配置,在system.web中:

<httpHandlers>
      <add path="*.aspx" verb="*" type="Plat.LogHandler.Handler" />
</httpHandlers>

在system.webserver中

<handlers>
    <add path="*.aspx" verb="*" type="Plat.LogHandler.Handler" name="logHandler" />
</handlers>

采用这种方法,在没有修改原有系统代码的情况下,满足了用户的需求。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ASP.NET MVC 是一个全新的Web应用框架 ASP.NET 代表支撑应用框架的技术平台,表明ASP.NET...
    JunChow520阅读 1,270评论 0 1
  • 注入攻击的分类 1.没有正确过滤转义字符 在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传...
    查无此人asdasd阅读 1,705评论 0 5
  • 更改ip和dnsVi /etc/sysconfig/network-scripts/ifcfg-eth0vi /...
    Xwei_阅读 1,913评论 0 3
  • [SQL注入攻击] SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式...
    James黄杰阅读 2,762评论 0 30
  • 目录本次给大家介绍的是我收集以及自己个人保存一些.NET面试题简介1.C# 值类型和引用类型的区别2.如何使得一个...
    寒剑飘零阅读 4,860评论 0 30