直接上代码

还是有一定通用性的

  1. <%@ WebHandler Language="C#" Class="MyService" %>
  2.  
  3. using System;
  4. using System.Web;
  5. using System.Collections.Generic;
  6. /// <summary>
  7. /// 测试访问路径:http://localhost:2484/TestAjaxFrameWork/MyService.ashx?c=class1&m=hello&parm1=23&parm2=33&parm3=4
  8. /// </summary>
  9. public class MyService : IHttpHandler
  10. {
  11.  
  12. public void ProcessRequest(HttpContext context)
  13. {
  14. AjaxHelper ajax = new AjaxHelper(context.Request.QueryString["c"], context.Request.QueryString["m"]);
  15. List<string> objlist = new List<string>();
  16. foreach (string item in context.Request.QueryString.Keys)
  17. {
  18. if (item != "c" && item != "m")
  19. {
  20. objlist.Add(context.Request.QueryString[item]);
  21. }
  22. }
  23. object[] parms = objlist.ToArray();
  24. ajax.ProcessRequest(context, parms);
  25. }
  26.  
  27. public bool IsReusable
  28. {
  29. get
  30. {
  31. return false;
  32. }
  33. }
  34. }

  

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Reflection;
  6. using System.Collections;
  7. using System.Web.Compilation;
  8. using System.Web;
  9.  
  10. /// <summary>
  11. /// AjaxHelper 的摘要说明
  12. /// </summary>
  13. public class AjaxHelper
  14. {
  15. /// <summary>
  16. /// 要访问的类名
  17. /// </summary>
  18. public string ClassName { get; set; }
  19.  
  20. /// <summary>
  21. /// 要访问的方法
  22. /// </summary>
  23. public string MethodName { get; set; }
  24.  
  25. /// <summary>
  26. /// 构造函数初始化类名,方法
  27. /// </summary>
  28. /// <param name="className"></param>
  29. /// <param name="methodName"></param>
  30. public AjaxHelper(string className, string methodName)
  31. {
  32. this.ClassName = className;
  33. this.MethodName = methodName;
  34. }
  35.  
  36. public void ProcessRequest(HttpContext context, object[] parms)
  37. {
  38. //类名方法名不能为空啊
  39. if (string.IsNullOrEmpty(this.ClassName) || string.IsNullOrEmpty(this.MethodName))
  40. {
  41. Report404Error(context);
  42. return;
  43. }
  44.  
  45. //获取当前程序集,这就限定了,调用的ajax类必须和当前类是一个程序集了
  46. Assembly curAssembly = Assembly.GetExecutingAssembly();
  47.  
  48. //取得包含ajax类特性的公共类
  49. var ts = from t in curAssembly.GetExportedTypes()
  50. let a = (AjaxClassAttribute[])t.GetCustomAttributes(typeof(AjaxClassAttribute), false)
  51. where a.Length > 0
  52. select t;
  53.  
  54. //获取当前访问的类型
  55. Type type = ts.FirstOrDefault(t => string.Compare(this.ClassName, t.Name, true) == 0);
  56.  
  57. //获取当前访问的方法
  58. MethodInfo method = type.GetMethod(this.MethodName,
  59. BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase);
  60.  
  61. //检测是否包含ajax方法特性
  62. AjaxMethodAttribute[] attrs = (AjaxMethodAttribute[])
  63. method.GetCustomAttributes(typeof(AjaxMethodAttribute), false);
  64. if (attrs.Length != 1)
  65. {
  66. Report404Error(context);
  67. }
  68. //调用方法奥
  69. method.Invoke(Activator.CreateInstance(type), parms);
  70. }
  71.  
  72. private void Report404Error(HttpContext context)
  73. {
  74. throw new HttpException(404,
  75. "没有找到能处理请求的服务类,当前请求地址:" + context.Request.RawUrl);
  76. }
  77. }
  78. /// <summary>
  79. /// 自定义特性,表示ajax类
  80. /// </summary>
  81. public class AjaxClassAttribute : Attribute
  82. {
  83.  
  84. }
  85.  
  86. /// <summary>
  87. /// 自定义特性,表示ajax方法奥
  88. /// </summary>
  89. public class AjaxMethodAttribute : Attribute
  90. {
  91.  
  92. }

  

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5.  
  6. [AjaxClass]
  7. /// <summary>
  8. /// Class1 的摘要说明
  9. /// </summary>
  10. public class Class1
  11. {
  12. public Class1()
  13. {
  14. //
  15. // TODO: 在此处添加构造函数逻辑
  16. //
  17. }
  18.  
  19. [AjaxMethod]
  20. public void hello(string parm1, string parm2, string parm3)
  21. {
  22. HttpContext.Current.Response.Write("test context," + parm1 + "," + parm2 + "," + parm3 + ",");
  23. }
  24. }

  

通用的ashx调用的更多相关文章

  1. Winform开发框架之通用Windows摄像头调用拍照--SNF快速开发平台3.3-Spring.Net.Framework

    今天做了一个windows系统下调用摄像头.进行开启.关闭.拍照.设置等等功能演示. 进行源码贡献,欢迎大家下载使用 一.DEMO效果如下: 二.DEMO演示代码如下: using SNF.Utili ...

  2. ashx调用session对象

    1.引入命名空间 using System.Web.SessionState 2.必须实现接口 public class Login : IHttpHandler, IRequiresSessionS ...

  3. orm 通用方法——RunProc调用存储过程

    该方法暂不支持带返回值的存储过程,期待能人补充指点. 定义代码: /** * 描述:执行存储过程 * 作者:Tianqi * 日期:2014-09-16 * param:rs orm.RawSeter ...

  4. 如何优雅的使用Fegin去构造通用的服务调用的API

    第一步: 创建一个公共的API服务:命名为api(根据自己实际情况进行命名) <?xml version="1.0" encoding="UTF-8"?& ...

  5. SNF开发平台WinForm之十二-发送手机短信功能调用-金笛-SNF快速开发平台3.3-Spring.Net.Framework

    1.调用前组装参数 2.调用发送信息服务脚本   .调用前组装参数: BaseSendTaskEntity entity = new BaseSendTaskEntity(); entity.Mess ...

  6. ASP.net与SQLite数据库通过js和ashx交互(连接和操作)

    ASP.net与SQLite数据库通过js和ashx交互(连接和操作): 废话(也是思路):用的是VS2010,打算做网站前后台.由于不喜欢前台语言里加些与html和css和js的其他内容,想实现前后 ...

  7. 通用mapper认识和用法

    目录 0. 认识 1. 导包 2. mybatis的config文件:mybatis-mapper-config.xml 3. spring与mybatis整合配置文件:mybatis.xml 4. ...

  8. SNF开发平台WinForm-表单验证控件-通用

    CS程序也能做到像BS程序一样的验证效果,如下: 1.验证控件的展示 校验时如果不符合验证条件的控件,会在控件上显示较显眼的图标. 当出现不符合验证的控件时,鼠标悬浮会显示自定义的提示信息. 如:输入 ...

  9. SNF快速开发平台MVC-EasyUI3.9之-WebApi和MVC-controller层接收的json字符串的取值方法和调用后台服务方法

    最近项目组很多人问我,从前台页面传到后台controller控制层或者WebApi 时如何取值和运算操作. 今天就都大家一个在框架内一个取值技巧 前台JS调用代码: 1.下面是选中一行数据后右键点击时 ...

随机推荐

  1. bzoj 4278 Tasowanie 后缀数组+贪心

    题目大意 给定两个数字串A和B,通过将A和B进行二路归并得到一个新的数字串T,请找到字典序最小的T.\(len \leq 200000\) 题解 我们从归并排序的角度去想,每次把两者之一较小的取出来 ...

  2. node.js Web应用框架Express入门指南

    node.js Web应用框架Express入门指南 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-28 我要评论 这篇文章主要介绍了node.js Web应用框架Express入门 ...

  3. BZOJ1382:[Baltic2001]Mars Maps

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://www.lydsy.com/JudgeOnline/prob ...

  4. DataGrid 滚动特定的行或者列

    DataGrid 滚动特定的行或者列. DataGrid.ScrollIntoView Method (Object, DataGridColumn) .NET Framework 4.5 Silve ...

  5. java基础之框架篇(1)

    框架基础反射:反射是Java开发的一类动态相关机制.因为本身Java语言并不是一款动态语言,如果我们想要得到程序动态的效果,因此便引入了反射机制这一概念. 问题:Java中创建实例化对象有哪些方式? ...

  6. MVC 模式介绍(1)

    MVC 模式 MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发. Model(模型) - 模型代表一个存取数据的对象或 JAVA ...

  7. Excel中导入到oracle使用merge into 差异性更新数据库

    merge into temp1 ausing (select ID         from (Select ID                 from temp1                ...

  8. c程序十六进制字符串转换为整数与反转

    字符串转整数使用sscanf ; char *buf = "1d5ce"; sscanf (buf, "%x", &value); printf (&q ...

  9. centos 安装webbench 用于web压力测试

    1.WebBench安装: yum install ctags(先安装依赖库) mkdir /usr/local/man (创建一个目录不然会报错) wget http://home.tiscali. ...

  10. PyCharm中导入第三方包

    在Windows中的PyCharm中导入模块的方法 1.在file-->setting-->project interpreter中 2,点击右上角加号,搜索要添加的第三方库的名称,得到后 ...