在項目開發中,只要用到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傳遞方法名,來控制功能對應的方法。
