我有一個使用多個控制器繼承的應用程序。我重寫我的產業的多層次Initialize(RequestContext requestContext)
,但每次我重寫Initialize
方法,我稱之爲base.Initialize(requestContext);
在ASP.NET MVC 5中,設置User對象的方法是什麼?
[Authorize]
public class FirstBaseController: Controller
{
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
// Set few custom global things
}
}
public class SecondBaseController: FirstBaseController
{
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
// At this point, I am expecting that the `User` object is already set by identity
//check the claims value here.
}
}
但是,如果我嘗試從Initialize
方法內部訪問User
對象,我發現它尚未確定!
框架在什麼時候設置User
對象?操作方法之前的哪個方法可以覆蓋User
對象將被設置的位置?
我不想在這裏使用動作過濾器,因爲我想讓這個邏輯在每個請求上得到執行。
我很困惑。爲什麼您認爲Action filter不會在每個請求上執行? –
@ErikFunkenbusch我不想手動爲每個方法添加屬性,除非有辦法將其添加到所有方法。 +是否可以從操作過濾器中訪問'User'對象? –
您可以通過操作過濾器中的「HttpContext.Current.User」訪問User對象。如果您查看實際的MVC源代碼,您將看到控制器上的User屬性僅從當前http上下文返回用戶。 –