ASP.NET MVC 入門10、Action Filter 與 內建的Filter實現(例項-防盜鏈)
阿新 • • 發佈:2018-12-27
本系列文章基於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 { get; set; }
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");
}
}
簡單測試一下:
對於ActionFilter的應用是很廣泛的,這需要你的靈活運用。對於其他應用,你可以參考我之前翻譯的ASP.NET MVC Action Filter - 快取與壓縮 這一篇文章。
Enjoy!這個沒有什麼程式碼,就暫不傳程式碼了。