从同一个类中的另一个方法获取标识

时间:2016-10-12 18:58:52

标签: asp.net-mvc class

在课堂上我得到了像

这样的用户
public static GetUserById_Result GetUser(string userId)
        {
            GetUserById_Result user = new GetUserById_Result();

            try
            {
                using (EF.SSMA oContext = new EF.SSMA())
                {
                    user = oContext.GetUserById(userId).FirstOrDefault();
                }
            }
            catch (Exception)
            {
                throw;
            }

            return user;
        }

所以它运行正常。但在同一个类中,我想将用户值访问另一个方法

 public static List<GetUsers_Result> SelectAll()
        {
            List<GetUsers_Result> lstResult = new List<GetUsers_Result>();


            try
            {
                using (EF.SSMA oContext = new EF.SSMA())
                {

                    lstResult = oContext.GetUsers().Where().ToList();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return lstResult;
        }

我需要做些什么呢?进入控制器非常简单我只是这样做:

        var users = User.Identity.GetUserId();

            GetUserById_Result currentUser = UserClass.GetUser(users);
            var role = currentUser.BranchOfficeId;

但是如何在同一个班级中访问它&#39;我尝试用

调用GetUserId
 System.Web.HttpContext.Current.User.Identity.GetUserId(); 

但它只是用红色标记HttpContext并说&#34;无法解析符号&#39; HttpContext&#39;&#34;

我的目标是只调用BranchOfficeId = user.BranchOfficeId

的用户

非常感谢帮助。此致

2 个答案:

答案 0 :(得分:0)

如果我理解您的问题,请确保您已安装包Microsoft.Owin.Host.SystemWeb并添加using System.Web,然后使用directely User.Identity.GetUserId()

答案 1 :(得分:0)

您可以在控制器中执行此操作的原因是Controller具有HttpContext属性,该属性是使用当前请求的详细信息创建的,包括当前用户的身份。

如果要从其他类访问用户,则需要将用户作为参数传递给方法。举个例子:

using System.Security.Principal;

public class SomeClass
{
    public void SomeMethod(IPrincipal user)
    {
        // Whatever you need
    }
}

然后在你的控制器中:

var someClass = new SomeClass();
someClass.SomeMethod(HttpContext.User);

但是,如果您只对用户名称感兴趣,那么您实际上只需传递一个字符串:

public class SomeClass
{
    public void SomeMethod(string username)
    {
        // Whatever you need
    }
}

然后在你的控制器中:

var someClass = new SomeClass();
someClass.SomeMethod(HttpContext.User.Identity.Name);