ashx文件使用

来源:互联网 发布:以太网无法连接到网络 编辑:程序博客网 时间:2024/05/24 00:48

在项目开发中,只要用到ajax,一般都少不了使用vs的一般处理程序(ashx文件),下面详细介绍下该文件:

一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩展名。一个httpHandler接受并处理一个http请求,类比于Java中的servlet。类比于在Java中需要继承HttpServlet类,在。net中需要实现IHttpHandler接口,这个接口有一个IsReusable成员,一个待实现的方法ProcessRequest(HttpContextctx) 。程序在processRequest方法中处理接受到的Http请求。成员IsReusable指定此IhttpHnadler的实例是否可以被用来处理多个请求。
.ashx程序适合产生供浏览器处理的、不需要回发处理的数据格式,例如用于生成动态图片、动态文本等内容。
上面一段很熟悉,就是百度百科里对ashx的定义。
废话不说,直接贴代码:
一般处理程序的最简单代码为:
复制代码
<%@ WebHandler Language="C#" Class="LoginHandler" %>using System;using System.Web;public class LoginHandler : IHttpHandler,{        public void ProcessRequest (HttpContext context) {        context.Response.ContentType = "text/plain";        string strEmail = context.Request["Email"];//接收参数        string strPwd = context.Request["Pwd"];        //书写业务逻辑        context.Response.Write("Hello");    }     public bool IsReusable {        get {            return false;        }    }}
复制代码

上面这种写法,一个功能可能就要对应一个ashx文件,项目里的文件可能比较多,不容易管理。如果我们想要在一个ashx文件中加入多个功能(即方法),我们就要引入反射的概念,相关ashx代码如下:

复制代码
<%@ WebHandler Language="C#" Class="AjaxHandler" %>using System;using System.Web;public class AjaxHandler : IHttpHandler{    public void ProcessRequest(HttpContext context)    {        context.Response.ContentType = "text/plain";        string Cmd = context.Request["cmd"];//接收方法名参数        if (!string.IsNullOrEmpty(Cmd))        {            System.Reflection.MethodInfo Method = this.GetType().GetMethod(Cmd, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);//通过反射机制,直接对应到相应的方法            if (Method != null)            {                Method.Invoke(this, new object[] { context });            }        }        else        {            context.Response.Redirect("~/Login.aspx");        }    }    void DelContents(HttpContext context)    {        string strGuid = context.Request["Guid"];//接收参数        context.Response.Write("OK");    }            public bool IsReusable    {        get        {            return false;        }    }}
复制代码

 ajax代码,使用jqueryajax

复制代码
$.ajax({                    type: "POST",                    url: "AjaxHandler.ashx",                    async: false,                    data: "cmd=DelContents&Guid=" + id,                    success: function (data) {                        ret = data;                    }                });
复制代码

通过cmd传递方法名,来控制功能对应的方法。