如果我将构造函数添加到AuthorizeAttribute的扩展名,将在每个附加属性的请求上调用该构造函数吗?

问题描述 投票:0回答:1

我已经编写了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;
    }
}


c# security authorize system.web
1个回答
0
投票

您不需要构造函数。您只需要添加一个静态类bool? (空布尔)变量。然后在您的方法中,如果变量为null,则仅从config读取数据。在下一次执行中,由于其不为null,因此它不会读取config。

© www.soinside.com 2019 - 2024. All rights reserved.