ashx文件使用
在项目开发中,只要用到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传递方法名,来控制功能对应的方法。