一般处理程序HttpHandler的应用
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="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():
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 == )
{
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());
}
}
}
一般处理程序HttpHandler的应用的更多相关文章
- 002-一般处理程序(HttpHandler)
一般处理程序(HttpHandler):是一个实现System.Web.IHttpHandler接口的特殊类.任何一个实现了IHttpHandler接口的类,是作为一个外部请求的目标程序的前提.(凡是 ...
- 使用一般处理程序HTTPHandler下载文件
一般来说我们可以用HTTPHandler来处理一些简单的逻辑,比如验证码.下载文件等. 以下载word文档为例讲解一下如何在HHTPHandler中下载文件,不限于word文档,如果下载其他文件,需要 ...
- EasyUI - 使用一般处理程序 HttpHandler (.ashx)
以easyui中的panel中,使用url加载数据为列. 效果: html代码: <div id="p" style="padding: 10px;"&g ...
- 【IHttpHandler】HttpModule,HttpHandler,HttpHandlerFactory简单使用
这三个对象我们在开发Asp.net程序时经常会用到,似乎很熟悉,但有时候又不太确定.本文通过一个简单的例子来直观的比较一下这三个对象的使用. HttpModule:Http模块,可以在页面处理前后.应 ...
- HttpModule,HttpHandler,HttpHandlerFactory
HttpModule:Http模块,可以在页面处理前后.应用程序初始化.出错等时候加入自己的事件处理程序. HttpHandler:Http处理程序,处理页面请求 HttpHandlerFactory ...
- .net-一般处理程序及生命周期
IsReusable属性用来表示在IHttpHandlerFactory对象创建IHttpHandler的时候是否能够将这个Handler存入池中以便重用. 一般处理程序(HttpHandler):是 ...
- 【.net项目中。。】.net一般处理程序使用方法
1.基本原理图 IsReusable属性用来表示在IHttpHandlerFactory对象创建IHttpHandler的时候是否能够将这个Handler存入池中以便重用. 一般处理程序(HttpHa ...
- C#强化系列:HttpModule,HttpHandler,HttpHandlerFactory简单使用
这三个对象我们在开发Asp.net程序时经常会用到,似乎很熟悉,但有时候又不太确定.本文通过一个简单的例子来直观的比较一下这三个对象的使用.HttpModule:Http模块,可以在页面处理前后.应用 ...
- asp.net页面生命周期
Asp.Net页面生命周期 本文转载自:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html 一.什么是Asp.Net页面生命周期 当 ...
随机推荐
- 05 - JavaSE之数组
一维数组 java中的数组是引用类型,分配在堆空间上. 一维数组的声明方式: type var[]; type[] var; java中声明数组时不能指定其长度,如下,因为java中的数组是分配在堆空 ...
- Vue笔记:在项目中使用 SCSS
背景概述 1. CSS预处理器 css预处理器定义了一种新的编程语言,编译后成正常的CSS文件.为CSS增加一些编程的特性,无需考虑浏览器的兼容问题,让CSS更加简洁,适应性更强,可读性更佳,更易于代 ...
- Mysql索引会失效的几种情况分析
转:https://www.jb51.net/article/50649.htm 学习啦
- 【转】Java中堆和栈的区别
Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和multianewarray等 指令建立,它们不需要程序代码来显式的释放.堆是由垃圾回收 ...
- Java NIO系列教程(六) Selector
Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管理多个网络连接. 下面是 ...
- spring StopWatch用法
背景 有时我们在做开发的时候需要记录每个任务执行时间,或者记录一段代码执行时间,最简单的方法就是打印当前时间与执行完时间的差值,然后这样如果执行大量测试的话就很麻烦,并且不直观,如果想对执行的时间做进 ...
- 阿里云服务器搭建SVN
简单步骤介绍 1:安装svn apt-get install subversion 2. 开启svn服务器 svnserve -d 检查是否开启:ps aux | grep svnserve 若出现如 ...
- python的Web框架,Django模板变量,过滤器和静态文件引入
HTML模板的路径查找 在setting中设置查找路径: #默认的查找在此处填写,优先级最高,为在manage.py的同级路径中,添加(常规是template)文件夹,在(template)文件夹中配 ...
- php json_encode在CI框架中的使用细节
这个错误的造成原因是加载类类库,转换成json格式的时候不熟悉CI框架的规定导致的,CI框架中规定在将数据转换成json格式的时候需要将类库小写,当然了,调用的时候必须保证有这个类库,且可以在对应的文 ...
- [c#] Html Agility Pack 解析HTML
摘要 在开发过程中,很有可能会遇到这样的情况,服务端返回的是html的内容,但需要在客户端显示纯文本内容,这时候就需要解析这些html,拿到里面的纯文本.达到这样的目的可以有很多途径,比如自己写正则表 ...