• 响应不同的Ajax请求,您是怎么做的?


    使用Jquery发送请求,服务端用ashx文件来处理客户端的请求, 最开始的时候像下面的情形:
    1、$.get("getName.ashx",{id:12345},function(data){});

    2、$.post("setName.ashx",{name:"Zaibiechu"},function(data){});


    一个请求对应一个ashx文件,项目做久了,于是产生了一堆的ashx文件,自然觉得不是一个好办法。再接下来就把一些相关的请求放到同一个文件中来,而客户端通过发送一个“cmd”参数,来请求相应的方法,如下: 

    1、$.get("nameMethod.ashx",{cmd:"getName",id:12345},function(data){});

    2、$.post("nameMethod.ashx",{cmd:"setName",name:"Zaibiechu"},function(data){});


    服务器端处理: 

    public class nameMethod : IHttpHandler {
       
    public void ProcessRequest (HttpContext context) {
            context.Response.ContentType 
    = "text/plain";
            
    if (context.Request["cmd"!= null)
            {
                
    string cmd = context.Request["cmd"];
                
    switch (cmd)
                {
                    
    case "getName": GetName(context); break;
                    
    case "setName": SetName(context); break;
                        .                    
                }
            }
        }


        
    public void GetName(HttpContext context)
        {
            
        }

       
    public void SetName(HttpContext context)
        {
            
        }

    .      

    }

    这样文件是省了不少,但是一堆case,看上去还是别扭,怎么才可以看上去更好点呢。琢磨了一阵,想到了反射,遂将后台方法修改如下:

    public class nameMethod : IHttpHandler {
        
        
    public void ProcessRequest (HttpContext context) {
            context.Response.ContentType 
    = "text/plain";
            
    if (context.Request["cmd"!= null)
            {
                
    string cmd = context.Request["cmd"];
                var method 
    = this.GetType().GetMethod(cmd);
                
    if (method != null)
                {
                    method.Invoke(
    thisnew object[]{ context});
                }
            }
        }


        
    public void GetName(HttpContext context)
        {
             

        }

       
    public void SetName(HttpContext context)
        {
             
        }  

    }

      

    看上去似乎“优雅”多了,我能想到的处理方法就是这样,但总觉得这土生土长的方法,是不是一个好的解决方案呢,想听听大家的意见,你们在处理这个问题上是怎么做的呢,请不吝赐教。 

  • 相关阅读:
    .NET中常用获取程序根目录的方法
    多态的实现
    9个优秀网上免费标签云生成工具
    Asp.Net自定义错误页心得介绍
    C# string.Format 格式化使用说明
    接口编程,反射创建对象
    DllImport使用的一点整理
    System.Data.ConstraintException: 未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。
    C# OleDb读取Excel文件 避免出现 科学计数法 的列
    C++翻译C#
  • 原文地址:https://www.cnblogs.com/benz/p/1458559.html
Copyright © 2020-2023  润新知