我如何在MVC3中公开身份验证令牌



我目前在基本控制器中具有我的身份验证令牌。因此,使用会员API,我必须在控制器中致电我的所有存储库。我想在我的模型中接触这些存储库,但需要这个令牌。

是否可以设置一个可以在每个请求上更新而不会影响所有用户的地方?有没有办法只能公开它,以至于我的视图模型可以在某些基本模型中访问它并与之调用库?

这是基本控制器中的当前代码:

/// <summary>
/// Provide authentication credentials for the current user.
/// </summary>
protected IToken AuthenticatedUserToken
    {
        get
        {
            var userCred = (UsersCredential) this.Session [GlobalContext.UserCredentialsSessionKey];
            if ( userCred != null )
            {
                return userCred.UsersToken;
            }
            if (Request.IsAuthenticated)
            {
                var name = HttpContext.User.Identity.Name;
                var repository = new UserRepository(GlobalContext.ProvisioningApiServiceBase,
                                                               GlobalContext.WebServiceUserAuthenticationToken);
                var usersCredential = new UsersCredential
                {
                    UsersName = name,
                    UsersToken =
                        repository.GetAuthenticationTokenForAuthenticatedUser(name)
                };
                Session[GlobalContext.UserCredentialsSessionKey] = usersCredential;
                return usersCredential.UsersToken;
            }                
            return null;
        }
    }
protected RepositoryCollection _Repositories { get; set; }
protected RepositoryCollection Repositories
    {
        get
        {
            if (_Repositories == null)
            {
                _Repositories = new RepositoryCollection(this.AuthenticatedUserToken);
            }
            return _Repositories;
        }
    }

将属性的访问级别更改为公共受保护的公共。受保护的方法和属性仅由班级及其祖先可见。

如果我了解您的问题:最好在操作中更新模型,而不是为您的模型提供存储库。如果您有一些基本模型,并且想几乎每个请求填写某些属性,而您不想复制past代码,则可以使用将为您设置此属性的操作过滤器。在这种情况下,您无需在模型类中包括任何逻辑。像这样的东西

最新更新