HttpHandler应用之 防止图片盗链
httpHandler 是特別類的一種,可以處理對(duì)特定類型文件的請(qǐng)求。實(shí)際上甚至可以通過創(chuàng)建自己的處理器來處理對(duì).aspx 頁面的請(qǐng)求,將整個(gè)頁面的處理系統(tǒng)換掉。下面我們就用HttpHandler 來防止圖片盜鏈。
?
代碼:
using System;
using System.Web;
?
namespace HttpHandlerDemo
{
??? public class JpgHandler:IHttpHandler
??? {
??????? #region IHttpHandler 成員
?
??????? public bool IsReusable
??????? {
??????????? get { return true; }
??????? }
?
??????? public void ProcessRequest(HttpContext context)
??????? {
??????????? string fileName = context.Request.FilePath;
??????????? if (context.Request.UrlReferrer.Host == null)
??????????? {
??????????????? context.Response.ContentType = "image/JPEG";
??????????????? context.Response.WriteFile("/no.jpg");
??????????? }
??????????? else
??????????? {
??????????????? if (context.Request.UrlReferrer.Host.IndexOf("localhost") >= 0)
??????????????? {
??????????????????? context.Response.ContentType = "image/JPEG";
??????????????????? context.Response.WriteFile(fileName);
??????????????? }
??????????????? else
??????????????? {
??????????????????? context.Response.ContentType = "image/JPEG";
??????????????????? context.Response.WriteFile("/no.jpg");
??????????????? }
??????????? }
??????? }
?
??????? #endregion
??? }
}
?
?
?
為了ASP.NET能和HttpHandler 通信,必須實(shí)現(xiàn) IHttpHandler 接口的所有成員。
?
1、?? ProcessRequest() 方法是處理請(qǐng)求并作出響應(yīng)的地方。
2、? IsReusable 屬性告訴 ASP.NET 是否該 HttpHandler 實(shí)例能被多個(gè)請(qǐng)求復(fù)用,或者它是否應(yīng)每次都創(chuàng)建一個(gè)新的實(shí)例。通常該屬性設(shè)為 true 。設(shè)為 false 的場(chǎng)景為,希望當(dāng)某個(gè)用戶的特定操作在處理器中發(fā)生時(shí)不希望下一位用戶接著使用。
?
做完了上面的工作,還需要在 web.config 文件中相關(guān)部分添加該 HttpHandler 到應(yīng)用程序中。
?
格式如下:
?<httpHandlers>
????? <add verb="*" path="*.jpg"type="MyClass,MyDll"/>
?</httpHandlers>?????
?
?
Verb 屬性表明了包含的請(qǐng)求類型(GET、POST)可以使用通配符 “*” 表示接受所有請(qǐng)求。
Path 描述了請(qǐng)求文件的路徑。
Type 指定了實(shí)現(xiàn) IHttpHandler 的類,以及其所在程序集名稱。這里要注意的是類名必須是完全名稱,即需要包括命名空間。
?
轉(zhuǎn)載于:https://www.cnblogs.com/China-Dragon/archive/2009/12/04/1617286.html
總結(jié)
以上是生活随笔為你收集整理的HttpHandler应用之 防止图片盗链的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC++ 6.0 中如何使用 CRT 调
- 下一篇: ERP 我最看重什么?