Ashx入门

简介

一般处理程序(HttpHandler)是.net众多web组件的一种,ashx是其扩展名。一个httpHandler接受并处理一个http请求,类比于java中的servlet。类比于继承httpServlet,在.net中需要实现IhttpHandler接口,这个接口有一个成员IsReusable,一个待实现的方法ProcessRequest(HttpContextctx) 。程序在processRequest方法中处理接受到的Http请求。成员IsReusable的使用方法后文会有介绍。一个http Handler的例子是这样的:


<% @ webhandler language="C#"class="AverageHandler" %> 
using System; 
using System.Web;
public class TestHandler : IHttpHandler 
{ 
public bool IsReusable { get { return true; } } 
public voidProcessRequest(HttpContext ctx) 
{ 
ctx.Response.Write("hello"); 
} 
}

浏览器地址栏请求这个ashx,会打印一个hello字符串

ashx在第一期请求的时候才编译,而不是预编译,所以建议在web.config里直接指定所对应的HttpHandler


IsReusable属性


IsReusableIhttpHandler接口的成员,这个成员的值的含义是:此IhttpHnadler的实例是否可以被用来处理多个请求。MSDNIsReusable的解释为:该值指示其他请求是否可以使用IHttpHandler实例。

所以指定IsReusabletrue的前提是:

    1. processHandler方法要线程安全
    2. 不依赖Request项。

ashx中访问Session

让自己的ashx类显式的实现一个接口 IReadOnlySessionState,示例如下:

 

<% @ webhandler language="C#" class="DownloadHandler" %> 
using System; 
using System.Web; 
using System.Web.SessionState ; 
 
public class DownloadHandler : IHttpHandler,  IReadOnlySessionState 
{
public bool IsReusable { get { return true; }} 
public void ProcessRequest(HttpContext ctx) 
  { 
//访问session
//ctx.Session["fred"]);
  } 
} 


如果要读写Session的值,那么只要实现 IRequiresSessionState 接口就即可,这两个接口没有待实现的方法


 


你可能感兴趣的:(Ashx入门)