通常處理程序HttpHandler的應用

ashxjavascript

通常處理程序(HttpHandler)是·NET衆多web組件的一種,ashx是其擴展名。一個httpHandler接受並處理一個http請求,類比於Java中的servlet。類比於在Java中須要繼承HttpServlet類。在net中須要實現IHttpHandler接口,這個接口有一個IsReusable成員,一個待實現的方法ProcessRequest(HttpContextctx) 。程序在processRequest方法中處理接受到的Http請求。成員IsReusable指定此IhttpHandler的實例是否能夠被用來處理多個請求。css

.ashx程序適合產生供瀏覽器處理的、不須要回發處理的數據格式,例如用於生成動態圖片、動態文本等內容。html


例子:java

1 前臺Html:jquery

<!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="width:400px;padding:30px 70px 20px 70px;">
                <div style="margin-bottom:10px">
                    <input id="userName1" name="userName" class="easyui-textbox" style="width: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="width: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="width:150px; height:12px; padding:12px; border: 1px solid #95BBE7 " />
                    <input id="checkCode" name="checkCode" value="XH59" class="code" type="text" onclick="createCode()" style="width: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;width:100%;">
                        <span style="font-size:14px;">登陸</span>
                    </a>
                </div>
            </div>
        </form>
    </div>    
</body>

 

2 JQuery實現前臺html中的Login():web

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());
        }
    }
}
相關文章
相關標籤/搜索