1. 程式人生 > >ASP.NET MVC 入門10、Action Filter 與 內建的Filter實現(例項-防盜鏈)

ASP.NET MVC 入門10、Action Filter 與 內建的Filter實現(例項-防盜鏈)

本系列文章基於ASP.NET MVC Preview5.

前一篇中我們已經瞭解了Action Filter 與 內建的Filter實現,現在我們就來寫一個例項。就寫一個防盜鏈的Filter吧。

首先繼承自FilterAttribute類同時實現IActionFilter介面,程式碼如下:

///<summary>
/// 防盜鏈Filter.
///</summary>

publicclass AntiOutSiteLinkAttribute : ActionFilterAttribute, IActionFilter
{
    
public AntiOutSiteLinkAttribute(FileType fileType)
    
{
        
this.FileType = fileType;
    }


    
///<summary>
    
/// 請求的檔案型別.(檔案或圖片)
    
///</summary>

public FileType FileType getset; }

    
IActionFilter 成員

    
///<summary>
    
/// 獲取網站的根域名
    
///</summary>
    
///<param name="domain">網站的域名,不帶"Http://"</param>
    
///<returns></returns>

privatestring GetRootDomain(string domain)
    
{
        
if (string.IsNullOrEmpty(domain))
        
{
            
thrownew ArgumentNullException("引數'domain'不能為空");
        }

        
string[] arr = domain.Split(new[] '.' }, StringSplitOptions.RemoveEmptyEntries);
        
if (arr.Length <=2)
        
{
            
return domain;
        }

        
else
        
{
            
return arr[arr.Length -2+"."+ arr[arr.Length -1];
        }

    }

}


publicenum FileType
{
    File 
=1,
    Image
}

然後我們建立一個用於處理檔案請求的Controller,並應用上我們剛才建立的Filter:

publicclass FilesController : BaseController
{
    [AntiOutSiteLink(FileType.Image)]
    
public ActionResult Image(string file)
    {
        
return Content("Image From 4mvc");
    } 

    [AntiOutSiteLink(FileType.File)]
    
public ActionResult File(string file)
    {
        
return Content("File From 4mvc");
    }

簡單測試一下:

image

image

對於ActionFilter的應用是很廣泛的,這需要你的靈活運用。對於其他應用,你可以參考我之前翻譯的ASP.NET MVC Action Filter - 快取與壓縮 這一篇文章。

Enjoy!這個沒有什麼程式碼,就暫不傳程式碼了。