AJax技术

C#实现简易ajax调用后台方法(2)

字号+ 作者:H5之家 来源:H5之家 2015-10-21 19:52 我要评论( )

现在我们再次回到ajax调用的地方,大家都会发现我们的参数列表室在太长了,因此大家可能会想用一些方法来改善,比如:连ashx都懒的重复去写了,想直接在url中把弥命名空间、类、方法直接放进去来替代,想到这一步的时候,

  现在我们再次回到ajax调用的地方,大家都会发现我们的参数列表室在太长了,因此大家可能会想用一些方法来改善,比如:连ashx都懒的重复去写了,想直接在url中把弥命名空间、类、方法直接放进去来替代,想到这一步的时候,我们就需要配置web.config了,假设我们想要的规则是SysBLL/SysBLL.CustomerBLL.Search,配置如下:

<httpHandlers> <add path=type=verb=/> </httpHandlers>

  有人会问为什么这边要.do,而不直接省略呢?因为如果不加.do,那么就会将其他的请求也都转向我们的ashx,例如:js、css文件等,大家可以自己测试看看.因为我们使用了地址映射,因此我们的js以及ashx代码又要做一些改动了.大致修改如下:

View Code

1 View Code Common 4 { BLLAshx : IHttpHandler 6 { ProcessRequest(HttpContext context) 8 { ], fullName = context.Request.Params[]; 10 var bllType = Assembly.Load(assemblyName).GetType(fullName); methodName = context.Request.Params[]; 13 var method = bllType.GetMethod(methodName); 14 if (null != method) 15 { 16 string[] parameterValues = GetMethodParameterValues(context.Request, method); instance = Activator.CreateInstance(bllType); result = method.ReturnType == : method.Invoke(instance, parameterValues).ToString(); context.Response.Write(result); 24 } { } 29 } [] GetMethodParameterValues(HttpRequest request, MethodInfo method) 32 { 33 string[] parameterValues = null; 34 var methodParameters = method.GetParameters(); 35 if (0 < methodParameters.Length) 36 { 37 parameterValues = new string[methodParameters.Length]; 38 for (int i = 0; i < methodParameters.Length; i++) 39 { 40 parameterValues[i] = request.Params[methodParameters[i].Name]; 41 } 42 } 43 return parameterValues; 44 } 45 } 46 } SysBLL 49 { CustomerBLL 51 { Search(string name) 53 { json; 56 } 57 } 58 }

  ashx的调整,我们只要修改ProcessRequest方法,代码大致如下:

View Code

); 2 var groups = reg.Match(context.Request.AppRelativeCurrentExecutionFilePath).Groups; 3 if (4 == groups.Count) 4 { ].Value, fullName = groups[].Value; 6 var bllType = Assembly.Load(assemblyName).GetType(fullName); methodName = groups[].Value; 9 var method = bllType.GetMethod(methodName); 10 if (null != method) 11 { 12 string[] parameterValues = GetMethodParameterValues(context.Request, method); instance = Activator.CreateInstance(bllType); result = method.ReturnType == : method.Invoke(instance, parameterValues).ToString(); context.Response.Write(result); 19 } { } 24 } { }

  有人可能会问为什么要重复SysBLL/SysBLL呢?其实可以省略其中的一个,但是条件是程序集必须要跟这个前缀一样才能省略.

  如果大家想要省略其中一次SysBLL,那么正则的匹配规则也要相应的调整一下,只要将(?<class>\w+.\w+)中的.\w+去掉即可.

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • JQuery实现Ajax加载图片的方法

    JQuery实现Ajax加载图片的方法

    2016-02-24 17:01

  • javascript返回顶部的按钮实现方法

    javascript返回顶部的按钮实现方法

    2016-01-17 18:28

  • 学习AJAX工作原理快速搭建网站方法

    学习AJAX工作原理快速搭建网站方法

    2016-01-17 16:41

  • ajax学习(二)-jquery的ajax方法总结

    ajax学习(二)-jquery的ajax方法总结

    2016-01-17 11:27

网友点评