我已经编写了System.Web.Mvc AuthorizeAttribute
的自定义扩展名。此处的Microsoft参考:SystemWebMvcAuthorizeAttribute。
此扩展名覆盖了AuthorizeCore
中的AuthorizeAttribute
功能,并且预期用途是此自定义属性将保留AuthorizeAttribute
的现有功能,而且如果进行了config
设置,还将对用户会话进行附加检查设置为true。
我们担心性能,因为此自定义属性将附加到每个API请求中,从而代替了当前使用的Authorize
属性。当前,在AuthorizeCore
函数中,我们正在读取每个单个请求的config
设置,并想知道是否有更好的处理方法。
因此,如果我为我的自定义属性创建一个构造函数,请在其中读取config
,然后将其存储在static
变量中,是否有人知道是否会在具有此自定义属性的每个单个请求上调用此构造函数附加属性,或者仅附加一次属性,然后每次对AuthorizeCore
的调用(在发出请求时调用)都可以引用static
变量,该变量存储了已经从config
中读取的值?
public class AuthorizeSessionAttribute : AuthorizeAttribute
{
bool _manageSession = false;
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// Since we are overriding the AuthorizeCore from AuthorizeAttribute, make sure to call the base method first to check that this request 'isAuthorized' before proceeding.
bool isAuthorized = base.AuthorizeCore(httpContext);
if (isAuthorized)
{
// Any way to improve this?
bool.TryParse(ConfigurationManager.AppSettings["ManageSession"], out _manageSession);
if (_manageSession)
{
// custom logic goes here
}
}
return isAuthorized;
}
}
您不需要构造函数。您只需要添加一个静态类bool? (空布尔)变量。然后在您的方法中,如果变量为null,则仅从config读取数据。在下一次执行中,由于其不为null,因此它不会读取config。