使用Jquery发送请求,服务端用ashx文件来处理客户端的请求, 最开始的时候像下面的情形:
1、$.get("getName.ashx",{id:12345},function(data){});
2、$.post("setName.ashx",{name:"Zaibiechu"},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){});
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)
{
}
.
}
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(this, new object[]{ context});
}
}
}
public void GetName(HttpContext context)
{
}
public void SetName(HttpContext context)
{
}
}
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(this, new object[]{ context});
}
}
}
public void GetName(HttpContext context)
{
}
public void SetName(HttpContext context)
{
}
}
看上去似乎“优雅”多了,我能想到的处理方法就是这样,但总觉得这土生土长的方法,是不是一个好的解决方案呢,想听听大家的意见,你们在处理这个问题上是怎么做的呢,请不吝赐教。