从Web API Controller在AuthenticationFilter中创建的访问对象

时间:2015-07-01 12:21:50

标签: c# asp.net-web-api2 actionfilterattribute

我在Web API 2项目中实现了HMAC身份验证过滤器(根据this article)。本文使用静态密钥进行演示,因此我修改了过滤器,以便使用' AppId'从数据库中查找私有API密钥。 GUID。这很好用,因为我能够为该AppId条目加载适当的帐户。但我想知道是否可以访问"帐户"在我的控制器中的身份验证过滤器类中创建的对象。

这是我宣布对象的方式:

public class HMACAuthenticationAttribute : Attribute, IAuthenticationFilter
    {
        private static Dictionary<string, string> allowedApps = new Dictionary<string, string>();
        public DummyAccount account = new DummyAccount();
    }

稍后在代码中:

// Load account and its private API Key
                    account = accountService.GetByAppId(Guid.Parse(appId), session);

                    if (account == null)
                    {
                        context.ErrorResult = new UnauthorizedResult(new AuthenticationHeaderValue[0], context.Request);
                    }

                    // If we find the account, we add to allowedApps the AppId/PrivateKey pair
                    allowedApps.Add(account.AppId.ToString(), account.ApiKey);

现在在我的WebApi控制器中,代码如下所示:

        [HMACAuthentication]
        [HttpPost]
        public RatingDto Post(SearchTrackDto searchedTrack)
        {

            // Access 'account' object here?

        }

我的期望是我可以以某种方式直接访问帐户对象,因此我不必再次解析请求并进行第二次数据库查询。将对象存储在Request.Context中是否可行?还有什么替代方案?

1 个答案:

答案 0 :(得分:0)

您可以尝试实施缓存。 AuthenticationFilter应该验证每个请求,因为上下文生命周期范围与请求死亡一样长。