我正在實現從AuthorizeAttribute繼承的自定義授權過濾器。經過我的研究,我發現動作過濾器被緩存,因此它們只被實例化一次。對不同動作的相同動作過濾器
這是我的問題。如果我實現並使用像下面這樣的自定義操作過濾器,它不應該正常工作,因爲它將被實例化一次,並且從不再次調用構造函數。但是當我測試時,它運行良好所以我想我有些東西我不知道。
任何人都可以清楚地解釋這個(動作過濾器生命週期?)嗎?
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
private readonly string value = string.Empty;
public CustomAuthorizeAttribute(string value)
{
this.value = value;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// Do something with this.value
}
}
public class HomeController : Controller
{
[CustomAuthorize("ACCESS_INDEX")]
public ActionResult Index()
{
}
[CustomAuthorize("ACCESS_LOGIN")]
public ActionResult Login()
{
}
}
您正在使用哪個版本的MVC? – thepirat000
@ thepirat000它是mvc3。 – user3110409
在CustomAuthorizeAttribute構造函數中放置一個斷點,您將看到它被兩次調用兩次,即索引和登錄,但隨後對索引和登錄的任何後續請求都不會在緩存中達到中斷點,因此它們會根據控制器操作緩存或者你可以說,如果在10動作中使用動作屬性,那麼該動作屬性將有最多10個實例。 – madan