Я написал собственное расширение 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;
}
}