HttpHandler的使用通过一种防盗链技术来演示
1.首先注册HttpHandler:在Web.config中注册
<httpHandlers> <!--映射jpg格式的文件,给ProcessHandler_test.CustomHandler处理。--> <!--type里面逗号之前 命名空间加类名(ProcessHandler_test.CustomHandler),后面程序集名称--> <add path="*.jpg" verb="*" type="httphander_test.CustomHandler, ProcessHandler_test" /> </httpHandlers>
上面注册是把网站中请求jpg格式文件的请求,映射给命名空间为httphander_test类名为CustomHandler的程序集ProcessHandler_test来处理请求。
2.如果想通过HttpHandler处理请求,必须在映射的处理程序中实现接口IHttpHandler
3.映射到的程序代码如下
namespace httphander_test { public class CustomHandler :IHttpHandler { public void ProcessRequest(HttpContext context) { // 获取文件服务器端物理路径 string FileName = context.Server.MapPath(context.Request.FilePath); // 如果UrlReferrer为空,则显示一张默认的禁止盗链的图片 if (context.Request.UrlReferrer.Host == null) { context.Response.ContentType = "image/gif"; context.Response.WriteFile("/error.gif"); } else { // 如果 UrlReferrer中不包含自己站点主机域名,则显示一张默认的禁止盗链的图片 if (context.Request.UrlReferrer.Host.IndexOf("yourdomain.com") > 0) { context.Response.ContentType = "image/gif"; context.Response.WriteFile(FileName); } else { context.Response.ContentType = "image/gif"; context.Response.WriteFile("/error.gif"); } } } public bool IsReusable { get { throw new NotImplementedException(); } } } }
上面这个简单的实例就完成了,如果有Jpg格式文件的请求,而不是在本网站的域名中请求,那么就会输出一个指定的错误图片来替换原连接图片。
总结:httpHandler的功能远不止这些,希望你能理解他是对一类文件请求的处理,也希望你能理解他在请求管道中的事件位置,这样对您理解会更有帮助。
转自:http://www.cnblogs.com/knowledgesea/archive/2013/03/20/2935933.html