Пользовательский атрибут аннотации данных является статическим - PullRequest
0 голосов
/ 09 октября 2018

У меня есть класс с именем AuthenticatToken, который выглядит следующим образом:

public class TokenBasedAuthentication : ActionFilterAttribute, IAuthenticationFilter
{
    ILocalData local = null;
    string token = string.Empty;
    bool istokenvalid = false;

    public async Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
    {
        istokenvalid = false;
        await Task.Factory.StartNew(() =>
        {
            var req = context.Request;

            IEnumerable<string> headervalues = new List<string>();
            bool hastoken = req.Headers.TryGetValues(Constants.TOKEN, out headervalues);

            if (hastoken)
            {
                local = new LocalData();
                token = headervalues.FirstOrDefault();
                istokenvalid = local.ValidateToken(token);
            }

            if (!istokenvalid)
            {
                context.ErrorResult = new AuthenticationFailureResult("Invalid token when accessing service", req);
            }
            else
            {
                IPrincipal incomingprincipal = context.ActionContext.RequestContext.Principal;
                context.Principal = incomingprincipal;
            }
        });
    }

    public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken)
    {
        return Task.FromResult(0);
    }
}

Проблема заключается в том, что при вызове вышеуказанного класса в качестве пользовательской аннотации данных в контроллере переменные не инициализируются, поскольку для второго запроса к контроллеру используются предыдущие значения.

[TokenBasedAuthentication]
public class SettingsController : ApiController, ISettings
{
}

, поэтому мой вопрос, является ли аннотация данных статической?

...