简介
一般处理程序(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属性
IsReusable是IhttpHandler接口的成员,这个成员的值的含义是:此IhttpHnadler的实例是否可以被用来处理多个请求。MSDN对IsReusable的解释为:该值指示其他请求是否可以使用IHttpHandler实例。
所以指定IsReusable为true的前提是:
- processHandler方法要线程安全
- 不依赖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 接口就即可,这两个接口没有待实现的方法