ashx文件使用
在项目开发中,只要用到ajax,一般都少不了使用vs的一般处理程序(ashx文件),下面详细介绍下该文件:
一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩展名。一个httpHandler接受并处理一个http请求,类比于Java中的servlet。类比于在Java中需要继承HttpServlet类,在。net中需要实现IHttpHandler接口,这个接口有一个IsReusable成员,一个待实现的方法ProcessRequest(HttpContextctx) 。程序在processRequest方法中处理接受到的Http请求。成员IsReusable指定此IhttpHnadler的实例是否可以被用来处理多个请求。
上面一段很熟悉,就是百度百科里对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传递方法名,来控制功能对应的方法。