ajax调用一般处理程序.ashx

博客探讨了如何优化AJAX对ASHX的一般处理程序的调用方式,包括使用switch语句的传统方法,通过反射进行改进以减少代码冗余,以及通过创建基类来实现公共方法和处理的复用,提高代码的可维护性和扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.一般调用ashx,使用switch

public void ProcessRequest(HttpContext context)
{
      switch (context.Request["action"])
      {
         case "Getxxx":
            break;
         case "Setxxx":
            break;
            ....
      }
}

 jquery调用

  $.post('xxx.ashx?action=Getxxx', {  }, function (data) {});

如果方法很多switch将变得很大,不易维护

2.使用反射调整

 public class Pub : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                if (context.Request.Form[0] == null)
                {
                    context.Response.Write("Error");
                    return;
                }
                string FunctionName = context.Request.Form[0];

                object[] parameters = null;
                if (context.Request.Form.Count - 1 > 0)
                {
                    parameters = new object[context.Request.Form.Count - 1];
                    for (int i = 0; i < parameters.Length; i++)
                    {
                        parameters[i] = context.Request.Form[i + 1];
                    }
                }
                MethodInfo method = typeof(Pub).GetMethod(FunctionName);
                object Result = "Error";
                if (method != null)
                {
                    Result = method.Invoke(this, parameters);
                }
                context.Response.Write(Result);
            }
            catch
            {
                context.Response.Write("Error");
            }
        }
        public string Getxxx(string t)
        {
            return "xxxx";
        }
    }

使用jquery调用

  $.post('Pub.ashx', { "fun": "Getxxx", "t": "" }, function (data) {     });

jquery调用的参数第一位必须是函数名"Getxxx",后面跟着请求参数

3.可以进一步改进ashx,做一个基类,放一些公共的方法,或者做一些公共的处理

 public class ControllerBase : IHttpHandler
    {
        private HttpContext _myContext = null;

        private System.Type _type = null;
        public System.Type Type 
        { 
            get { return _type; }
            set { _type = value; }
        }

        public HttpContext MyContext
        {
            get { return _myContext; }
            set { _myContext = value; }
        }
        public ControllerBase() { }

        public ControllerBase(HttpContext context) 
        {
            this._myContext = context;
        }

        public void ProcessRequest(HttpContext context)
        {
            this._myContext = context;
            try
            {
                if (context.Request.Form[0] == null)
                {
                    context.Response.Write("Error");
                    return;
                }

                object[] parameters = null;
                Type[] types = new Type[] { };
                if (context.Request.Form.Count - 1 > 0)
                {
                    parameters = new object[context.Request.Form.Count - 1];
                    types = new Type[context.Request.Form.Count - 1];
                    for (int i = 0; i < parameters.Length; i++)
                    {
                        parameters[i] = context.Request.Form[i + 1];
                        types[i] = typeof(string);
                    }
                }

                MethodInfo method = this.Type.GetMethod(context.Request.Form[0], types);

                object Result = "Error";
                if (method != null)
                {
                    Result = method.Invoke(this, parameters);
                }
                context.Response.Write(Result);
            }
            catch
            {
                context.Response.Write("Error");
            }
        }
}

其它子类继承基类

public class Mod : ControllerBase
    {
        public Mod()
        {
            base.Type = typeof(Mod);
        }
        public string Getxxx()
        {
            
            return "xxx";
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值