将经过ADFS身份验证的用户的UPN传递给SQL字符串以进行连接

时间:2019-02-11 22:58:08

标签: c# sql-server model-view-controller

我正在尝试根据登录用户的UPN从MS SQL数据库中提取信息。我想对于某些人来说这似乎微不足道。

在控制器中,我得到用户的UPN:

var identity = (ClaimsIdentity)User.Identity;
loggedInUser.UserHandle = identity.Claims.Where(c => c.Type == ClaimTypes.Upn).First().Value;
//get userHandle from UPN
int index = loggedInUser.UserHandle.LastIndexOf("@");
        if (index > 0)
            loggedInUser.UserHandle = loggedInUser.UserHandle.Substring(0, index);

在此之下,我尝试获取数据:

String sql = "Select * from [MyDatabase].[dbo].[TableName] where UserHandle = @userHandle";
using (SqlConnection conn = new SqlConnection(connectionString))
        {
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add(new SqlParameter("userHandle", loggedInUser.UserHandle));

            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                user.FirstName = reader["FirstName"].ToString();
                user.LastName = reader["LastName"].ToString();
            }
            conn.Close();
        }
 return View(loggedInUser);

我可以使用@ Model.UserHandle在View中看到正确的UserHandle。但是它在Controller中返回null,因此我无法从表中获取firstName和LastName。

我在做什么错?如何获取要在我的sql字符串中使用的UPN值,以便可以从表中获取数据?

1 个答案:

答案 0 :(得分:0)

为了以防万一,将其保留在此处。

我需要传递“用户”而不是“ loggedInUser”:

return View(user);