通用的ashx调用_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 通用的ashx调用

通用的ashx调用

 2013/7/19 12:59:40  12饕餮21  博客园  我要评论(0)
  • 摘要:直接上代码还是有一定通用性的<%@WebHandlerLanguage="C#"Class="MyService"%>usingSystem;usingSystem.Web;usingSystem.Collections.Generic;///<summary>///测试访问路径:http://localhost:2484/TestAjaxFrameWork/MyService.ashx?c=class1&m=hello&parm1=23&
  • 标签:

直接上代码

还是有一定通用性的

class="brush:csharp;gutter:false;"><%@ WebHandler Language="C#" Class="MyService" %>

using System;
using System.Web;
using System.Collections.Generic;
/// <summary>
/// 测试访问路径:http://localhost:2484/TestAjaxFrameWork/MyService.ashx?c=class1&m=hello&parm1=23&parm2=33&parm3=4
/// </summary>
public class MyService : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        AjaxHelper ajax = new AjaxHelper(context.Request.QueryString["c"], context.Request.QueryString["m"]);
        List<string> objlist = new List<string>();
        foreach (string item in context.Request.QueryString.Keys)
        {
            if (item != "c" && item != "m")
            {
                objlist.Add(context.Request.QueryString[item]);
            }
        }
        object[] parms = objlist.ToArray();
        ajax.ProcessRequest(context, parms);
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

  

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Collections;
using System.Web.Compilation;
using System.Web;

/// <summary>
/// AjaxHelper 的摘要说明
/// </summary>
public class AjaxHelper
{
    /// <summary>
    /// 要访问的类名
    /// </summary>
    public string ClassName { get; set; }

    /// <summary>
    /// 要访问的方法
    /// </summary>
    public string MethodName { get; set; }

    /// <summary>
    /// 构造函数初始化类名,方法
    /// </summary>
    /// <param name="className"></param>
    /// <param name="methodName"></param>
    public AjaxHelper(string className, string methodName)
    {
        this.ClassName = className;
        this.MethodName = methodName;
    }

    public void ProcessRequest(HttpContext context, object[] parms)
    {
        //类名方法名不能为空啊
        if (string.IsNullOrEmpty(this.ClassName) || string.IsNullOrEmpty(this.MethodName))
        {
            Report404Error(context);
            return;
        }

        //获取当前程序集,这就限定了,调用的ajax类必须和当前类是一个程序集了
        Assembly curAssembly = Assembly.GetExecutingAssembly();

        //取得包含ajax类特性的公共类
        var ts = from t in curAssembly.GetExportedTypes()
                 let a = (AjaxClassAttribute[])t.GetCustomAttributes(typeof(AjaxClassAttribute), false)
                 where a.Length > 0
                 select t;

        //获取当前访问的类型
        Type type = ts.FirstOrDefault(t => string.Compare(this.ClassName, t.Name, true) == 0);

        //获取当前访问的方法
        MethodInfo method = type.GetMethod(this.MethodName,
                         BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase);

        //检测是否包含ajax方法特性
        AjaxMethodAttribute[] attrs = (AjaxMethodAttribute[])
                                            method.GetCustomAttributes(typeof(AjaxMethodAttribute), false);
        if (attrs.Length != 1)
        {
            Report404Error(context);
        }
        //调用方法奥
        method.Invoke(Activator.CreateInstance(type), parms);
    }

    private void Report404Error(HttpContext context)
    {
        throw new HttpException(404,
                "没有找到能处理请求的服务类,当前请求地址:" + context.Request.RawUrl);
    }
}
/// <summary>
/// 自定义特性,表示ajax类
/// </summary>
public class AjaxClassAttribute : Attribute
{

}

/// <summary>
/// 自定义特性,表示ajax方法奥
/// </summary>
public class AjaxMethodAttribute : Attribute
{

}

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

[AjaxClass]
/// <summary>
/// Class1 的摘要说明
/// </summary>
public class Class1
{
    public Class1()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //
    }

    [AjaxMethod]
    public void hello(string parm1, string parm2, string parm3)
    {
        HttpContext.Current.Response.Write("test context," + parm1 + "," + parm2 + "," + parm3 + ",");
    }
}

  

上一篇: ASP.NET MVC 5 学习教程:添加查询 下一篇: 没有下一篇了!
  • 相关文章
发表评论
用户名: 匿名