ashx
一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩展名。一个httpHandler接受并处理一个http请求,类比于Java中的servlet。类比于在Java中需要继承HttpServlet类。在net中需要实现IHttpHandler接口,这个接口有一个IsReusable成员,一个待实现的方法ProcessRequest(HttpContextctx) 。程序在processRequest方法中处理接受到的Http请求。成员IsReusable指定此IhttpHandler的实例是否可以被用来处理多个请求。
.ashx程序适合产生供浏览器处理的、不需要回发处理的数据格式,例如用于生成动态图片、动态文本等内容。
例子:
1 前台Html:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>ABC</title> <link rel="stylesheet" type="text/css" href="../easyui/themes/default/easyui.css" /> <link rel="stylesheet" type="text/css" href="../easyui/themes/icon.css" /> <script type="text/javascript" src="../easyui/jquery.min.js"></script> <script type="text/javascript" src="../easyui/jquery.easyui.min.js"></script> <script type="text/javascript" src="../easyui/locale/easyui-lang-zh_CN.js"></script> <script type="text/javascript" src="index.js"></script> <style type="text/css"> .code { background-image:url(/Images/verifyCode.png); font-family:Arial; font-style:italic; color:Red; border:0; padding:2px 3px; letter-spacing:3px; font-weight:bolder; text-align:center; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; -khtml-user-select: none; user-select: none; } </style> </head> <body> <div style="margin:0 auto;position:absolute;top:50%;margin-top:-115px;left:50%;margin-left:-200px"> <form id="fm" method="post" novalidate> <div id="login" class="easyui-panel" title="登录" style="400px;padding:30px 70px 20px 70px;"> <div style="margin-bottom:10px"> <input id="userName1" name="userName" class="easyui-textbox" style="100%;height:40px;padding:12px" data-options="prompt:'用户名',iconCls:'icon-man',iconWidth:38"> </div> <div style="margin-bottom:20px"> <input id="password1" name="password" class="easyui-textbox" type="password" style="100%;height:40px;padding:12px" data-options="prompt:'Password',iconCls:'icon-lock',iconWidth:38"> </div> <div style="margin-bottom:20px; display:inline"> <input id="verifyCode" name="verifyCode" type="text" style="150px; height:12px; padding:12px; border: 1px solid #95BBE7 " /> <input id="checkCode" name="checkCode" value="XH59" class="code" type="text" onclick="createCode()" style="60px" readonly /> </div> <div style="margin-top:20px; margin-bottom:20px"> <input id="remember1" name="remember" type="checkbox"> <span>记住密码</span> </div> <div> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-ok'" onclick="Login()" style="padding:5px 0px;100%;"> <span style="font-size:14px;">登录</span> </a> </div> </div> </form> </div> </body>
2 JQuery实现前台html中的Login():
function Login() { $('#fm').form('submit', { url: "../HttpHandler/LoginHandler.ashx?action=Login", onSubmit: function () { if (validate()) { return $(this).form('validate'); } else { return false; } //return $(this).form('validate'); }, error: function () { $.messager.alert('错误', '操作失败!', 'error'); }, success: function (result) { var result = eval('(' + result + ')'); if (result.success) { location.href = "../Pages/MainPage.htm"; } else { $.messager.alert('提示', result.msg, 'warning'); } } }); }
3 后台一般程序处理:LoginHandler.ashx:
namespace Web.HttpHandler { public class LoginHandler : IHttpHandler, IRequiresSessionState { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string sReturnJson = string.Empty; string action = ParamsofEasyUI.RequstString("action"); switch (action) { case "Login": sReturnJson = Login(); break; case "CheckLogin": sReturnJson = CheckLogin(); break; case "GetUserInfo": sReturnJson = GetUserInfo(); break; default: break; } context.Response.Write(sReturnJson); context.Response.End(); } private string GetUserInfo() { string result = string.Empty; //读取保存的Cookie信息 HttpCookie cookies = HttpContext.Current.Request.Cookies["USER_COOKIE"]; if (cookies != null) { result += "{UserName:'"; result += cookies["UserName"]; result += "',UserPassword:'"; result += cookies["UserPassword"]; result += "',Checked:true}"; } else { result += "{UserName:'"; result += "',UserPassword:'"; result += "',Checked:false}"; } return result; } private string CheckLogin() { if (HttpContext.Current.Session.Keys.Count == 0) { return "{success:false}"; } string curUser = HttpContext.Current.Session["userName"].ToString(); if (curUser == null) { return "{success:false}"; } if (HttpContext.Current.Application.AllKeys.Contains(curUser)) { return "{success:true}"; } else { return "{success:false}"; } } private string Login() { string userName = ParamsofEasyUI.RequstForm("userName"); string password = ParamsofEasyUI.RequstForm("password"); bool blChecked = ParamsofEasyUI.RequstBool("remember"); string localPsw = Encoding.Default.GetString(Convert.FromBase64String(ConfigTools.Get(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory.ToString(), ConfigurationManager.AppSettings["ConfigFile"]), "CODE"))); if (userName.ToLower() == "admin" && password == localPsw) { if (blChecked) { HttpCookie cookie = new HttpCookie("USER_COOKIE"); //所有的验证信息检测之后,如果用户选择的记住密码,则将用户名和密码写入Cookie里面保存起来。 cookie.Values.Add("UserName", userName); cookie.Values.Add("UserPassword", password); //这里是设置Cookie的过期时间,这里设置一个星期的时间,过了一个星期之后状态保持自动清空。 cookie.Expires = System.DateTime.Now.AddDays(7.0); HttpContext.Current.Response.Cookies.Add(cookie); } else { HttpCookie cookie = HttpContext.Current.Request.Cookies["USER_COOKIE"]; if (cookie != null) { //如果用户没有选择记住密码,那么立即将Cookie里面的信息清空,并且设置状态保持立即过期。 HttpContext.Current.Response.Cookies["USER_COOKIE"].Expires = DateTime.Now; } } string newGuid = Guid.NewGuid().ToString(); HttpContext.Current.Application.Lock(); HttpContext.Current.Application["admin"] = newGuid; HttpContext.Current.Application.UnLock(); HttpContext.Current.Session[HttpContext.Current.Session.SessionID] = newGuid; HttpContext.Current.Session.Add("UserName", userName); return "{success:true}"; } else { return "{success:false,msg:'用户名或密码错误!'}"; } } public bool IsReusable { get { return false; } } } }
namespace Web.HttpHandler { public class ParamsofEasyUI { public static string RequstForm(string name) { return (HttpContext.Current.Request.Form[name] == null ? string.Empty : HttpContext.Current.Request.Form[name].ToString().Trim()); } public static string RequstString(string sParam) { return (HttpContext.Current.Request[sParam] == null ? string.Empty : HttpContext.Current.Request[sParam].ToString().Trim()); } } }