HttpHandler應用之 - 防止圖片盜鏈

iDotNetSpace發表於2009-12-04

httpHandler 是特別類的一種,可以處理對特定型別檔案的請求。實際上甚至可以通過建立自己的處理器來處理對.aspx 頁面的請求,將整個頁面的處理系統換掉。下面我們就用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 通訊,必須實現 IHttpHandler 介面的所有成員。

 

1、   ProcessRequest() 方法是處理請求並作出響應的地方。

2、  IsReusable 屬性告訴 ASP.NET 是否該 HttpHandler 例項能被多個請求複用,或者它是否應每次都建立一個新的例項。通常該屬性設為 true 。設為 false 的場景為,希望當某個使用者的特定操作在處理器中發生時不希望下一位使用者接著使用。

 

做完了上面的工作,還需要在 web.config 檔案中相關部分新增該 HttpHandler 到應用程式中。

 

格式如下:

 <httpHandlers>

      <add verb="*" path="*.jpg"type="MyClass,MyDll"/>

 httpHandlers>     

 

Verb 屬性表明了包含的請求型別(GETPOST)可以使用萬用字元 * 表示接受所有請求。

Path 描述了請求檔案的路徑。

Type 指定了實現 IHttpHandler 的類,以及其所在程式集名稱。這裡要注意的是類名必須是完全名稱,即需要包括名稱空間。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-621637/,如需轉載,請註明出處,否則將追究法律責任。

相關文章