C#实现简易ajax调用后台方法
2012-06-27 11:19
441 查看
在当前WEB当中,有些人都会抛弃asp.net的服务器控件,转而使用ajax来进行数据的交互和存储.
当我们大量使用ajax的时候,对于新手而言,肯定会创建很多的ashx或aspx页面,通过拼接参数,在ashx或aspx中对参数进行解析,
并根据某些特定的参数进行解析来判断当前的请求属于哪种类型的操作,然后手动获取Request.QueryString、Params、Form内的值,来实现功能.大致代码如下:
View Code
有人可能会问为什么要重复SysBLL/SysBLL呢?其实可以省略其中的一个,但是条件是程序集必须要跟这个前缀一样才能省略.
如果大家想要省略其中一次SysBLL,那么正则的匹配规则也要相应的调整一下,只要将(?<class>\w+.\w+)中的.\w+去掉即可.
大致的实现流程就到这里了,我们已经将大部分的需求基本完成了,还有一些遗留的问题留给大家去完善啦,比如:调用的方法参数必须都是string类型,方法的返回值也必须要是string类型,反射的类不能是泛型类型的等等.
因为以上的代码是随着文章编写的,因此没有示例代码,没有办法提供给大家,请见谅,呵呵.以上如有错误,请大家告诉我,多谢.
因为例子要简单易理解,所以编码方面不管是程序集、类名、方法名都是明码,可能让部分人有所错觉,在实际开发当中,可以使用类似交易码之类的来替代对应的程序集、类名、方法名,这样就不会那么透明了,至于js方面的安全性,大家可以看看google的Gmail,以上仅仅是个人的理解,有错误,也希望大家能提出,呵呵。
当我们大量使用ajax的时候,对于新手而言,肯定会创建很多的ashx或aspx页面,通过拼接参数,在ashx或aspx中对参数进行解析,
并根据某些特定的参数进行解析来判断当前的请求属于哪种类型的操作,然后手动获取Request.QueryString、Params、Form内的值,来实现功能.大致代码如下:
View Code
var reg = new Regex(@"(?<assembly>\w+)\/(?<class>\w+\.\w+)\.(?<method>\w+)\."); var groups = reg.Match(context.Request.AppRelativeCurrentExecutionFilePath).Groups; if (4 == groups.Count) { string assemblyName = groups["assembly"].Value, fullName = groups["class"].Value; var bllType = Assembly.Load(assemblyName).GetType(fullName); var methodName = groups["method"].Value; var method = bllType.GetMethod(methodName); if (null != method) { string[] parameterValues = GetMethodParameterValues(context.Request, method); var instance = Activator.CreateInstance(bllType); var result = method.ReturnType == typeof(void) ? "{}" : method.Invoke(instance, parameterValues).ToString(); //以上Invoke省略了判断以及捕捉异常 context.Response.Write(result); } else { //返回不存在方法的提示 } } else { //url匹配不正确 }
有人可能会问为什么要重复SysBLL/SysBLL呢?其实可以省略其中的一个,但是条件是程序集必须要跟这个前缀一样才能省略.
如果大家想要省略其中一次SysBLL,那么正则的匹配规则也要相应的调整一下,只要将(?<class>\w+.\w+)中的.\w+去掉即可.
大致的实现流程就到这里了,我们已经将大部分的需求基本完成了,还有一些遗留的问题留给大家去完善啦,比如:调用的方法参数必须都是string类型,方法的返回值也必须要是string类型,反射的类不能是泛型类型的等等.
因为以上的代码是随着文章编写的,因此没有示例代码,没有办法提供给大家,请见谅,呵呵.以上如有错误,请大家告诉我,多谢.
因为例子要简单易理解,所以编码方面不管是程序集、类名、方法名都是明码,可能让部分人有所错觉,在实际开发当中,可以使用类似交易码之类的来替代对应的程序集、类名、方法名,这样就不会那么透明了,至于js方面的安全性,大家可以看看google的Gmail,以上仅仅是个人的理解,有错误,也希望大家能提出,呵呵。
相关文章推荐
- C#实现简易ajax调用后台方法
- 不用AJAX实现前台JS调用后台C#方法
- .net下不用AJAX实现前台JS调用后台C#方法
- 不用AJAX实现前台JS调用后台C#方法(小技巧)
- 不用AJAX实现前台JS调用后台C#方法(小技巧)
- 转:不用AJAX实现前台JS调用后台C#方法(小技巧)
- 不用AJAX实现前台JS调用后台C#方法(小技巧)
- 利用sender的Parent获取GridView中的当前行 不用AJAX实现前台JS调用后台C#方法(小技巧) AjaxControlToolkit的CalendarExtender的本地化
- 不用AJAX实现前台JS调用后台C#方法(小技巧) (转)
- 不用AJAX实现前台JS调用后台C#方法(小技巧)-转
- 不用AJAX实现前台JS调用后台C#方法(小技巧)
- 不用AJAX实现前台JS调用后台C#方法(小技巧) 【改自Web.网际浪人.Blog】
- 不用AJAX实现前台JS调用后台C#方法(小技巧) 【改自Web.网际浪人.Blog】
- 不用AJAX实现前台JS调用后台C#方法(小技巧)
- 不用AJAX实现前台JS调用后台C#方法(小技巧)
- 不用AJAX实现前台JS调用后台C#方法
- 不用AJAX实现前台JS调用后台C#方法
- 利用ajax实现前台javascript同c#后台MVC下的aspx.cs文件传递数据的两种方法2
- AJAX调用C#后台方法(带参数)
- 利用ajax实现前台javascript同c#后台MVC下的aspx.cs文件传递数据的两种方法