ashx文件没有页面元素,这点上区别于aspx页面,所以在效率上要比aspx页面高,通常用于ajax提交处理程序,实际项目中,用户的每个请求需要判断用户是否登录,可以是Cookie, Session,每个请求页面中去写判断用户是否登录的方法过于麻烦,所以可以通过一个基类实现所有请求方法前的用户登录状态判断。应用基类的好处可以将一些基本验证,公用方法,函数统一处理。
BaseHandle.ashx
/// <summary>
/// 基类
/// ashx中如果要使用Session需要继承 IRequiresSessionState 接口
/// </summary>
public class BaseHandler : IHttpHandler, IRequiresSessionState
{
/// <summary>
/// 请求处理
/// </summary>
/// <param name="context"></param>
public void ProcessRequest(HttpContext context)
{
// 逻辑验证, 如: 用户登录验证
// ...
// ...
// ...
if (1 == 0)
{
context.Response.ContentType = "text/plain";
context.Response.Write("error");
return;
}
context.Response.ContentType = "text/plain";
context.Response.Write("BaseHandler");
AjaxRequest(context);
}
/// <summary>
/// ajax请求, 继承页面进行请求调用
/// </summary>
/// <param name="context"></param>
public virtual void AjaxRequest(HttpContext context) { }
public bool IsReusable
{
get
{
return false;
}
}
}
继承页面,Test.ashx
public class Test : BaseHandler
{
public override void AjaxRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write("Test");
// 业务逻辑
// ...
// ...
// ...
}
}