我正在使用ActionFilterAttribute來執行自定義身份驗證邏輯。該屬性將僅用於包含我的驗證邏輯的派生控制器類。ActionFilterAttribute - 適用於特定控制器類型的操作
這裏是我的控制器,從我的定製控制器類派生和樣本屬性:
public class MyController : CustomControllerBase
{
[CustomAuthorize(UserType = UserTypes.Admin)]
public ActionResult DoSomethingSecure()
{
return View();
}
}
這裏是我的ActionFilterAttribute的例子:
public class CustomAuthorizeAttribute : ActionFilterAttribute
{
public MyUserTypes UserType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
myUser user = ((CustomControllerBase)filterContext.Controller).User;
if(!user.isAuthenticated)
{
filterContext.RequestContext.HttpContext.Response.StatusCode = 401;
}
}
}
的偉大工程。
下面是問題:我可以要求僅在我的自定義控制器類型的Actions上使用此屬性嗎?
您的屬性因爲不從AuthroizeAttribute繼承而被破壞,因此無法保證在操作緩存時運行。有關使用緩存的解決方案,請參閱http://blogs.teamb.com/craigstuntz/2009/09/09/38390/。 – 2009-09-17 17:20:48
爲什麼要將操作結果緩存? – 2009-09-17 17:24:12
它會被緩存,因爲有人告訴它被緩存。想象一下,有人將Cache屬性放在父類上,而不會注意到子類型上的損壞屬性。使用與ASP.NET/MVC緩存不兼容的屬性是一個更好的主意。有關選項,請參閱上面的鏈接。 – 2009-09-17 17:29:51