mvc4中的過(guò)濾器
過(guò)濾器(Filter)把附加邏輯注入到MVC框架的請(qǐng)求處理。實(shí)現(xiàn)了交叉關(guān)注。
交叉關(guān)注:用于整個(gè)應(yīng)用程序,又不適合放在某個(gè)局部位置的功能。
過(guò)濾器是.NET的注解屬性(Attribute),它們對(duì)請(qǐng)求處理管道添加了額外的步驟。
注解屬性是派生于System.Attribute的特殊的.NET類(lèi)。
可以被附加到類(lèi)、方法、屬性、字段等代碼元素上。其目的是把附加信息嵌入到已編譯的代碼中,以便在運(yùn)行時(shí)讀回這些信息。
過(guò)濾器的基本類(lèi)型:
| 過(guò)濾器類(lèi)型 | 接口 | 默認(rèn)實(shí)現(xiàn) | 描述 |
| Authorization | IAuthorizationFilter | AuthorizationAttribute | 最先運(yùn)行 |
| Action | IActionFilter | ActionFilterAttribute | 在動(dòng)作方法前后運(yùn)行 |
| Result | IResultFilter | ActionResultAttribute | 在動(dòng)作結(jié)果被執(zhí)行前后 |
| Exception | IExceptionFilter | HandlerErrorAttribute | 僅在過(guò)濾器、動(dòng)作發(fā)生異常時(shí) |
授權(quán)過(guò)濾器:IAuthorizationFilter
namespace System.Web.Mvc{ // 摘要:定義授權(quán)篩選器所需的方法。 public interface IAuthorizationFilter{ // 摘要:在需要授權(quán)時(shí)調(diào)用。 // 參數(shù):filterContext:篩選器上下文。 void OnAuthorization(AuthorizationContext filterContext); }}注意:
直接實(shí)現(xiàn)接口其實(shí)是一件非常危險(xiǎn)的事;因此創(chuàng)建一個(gè)自定義AuthorizeAttribute子類(lèi),再實(shí)現(xiàn)授權(quán)代碼比較容易。
public class CustomAuthAttribute:AuthorizeAttribute{ /// <summary> /// 是否對(duì)請(qǐng)求進(jìn)行授權(quán)訪問(wèn)的方式 /// </summary> /// <param name="httpContext">對(duì)請(qǐng)求信息進(jìn)行訪問(wèn)的方法</param> protected override bool AuthorizeCore(HttpContextBase httpContext){ return base.AuthorizeCore(httpContext); }}直接實(shí)現(xiàn)IAuthorizationFilter接口的主要原因是為了獲取對(duì)傳遞給OnAuthorization()的AuthorizationContext的訪問(wèn),通過(guò)它可以獲得更廣泛的信息(路由細(xì)節(jié)、當(dāng)前控制器和動(dòng)作方法信息)。使用接口的方式不僅有安全風(fēng)險(xiǎn)且讓授權(quán)注解屬性中建立的邏輯與控制器緊密的耦合在一起,破壞關(guān)注分離,不便于維護(hù)。
新聞熱點(diǎn)
疑難解答
圖片精選