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



我正在尝试根据登录用户的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 在视图中看到正确的 UserHandle。但它在控制器中返回 null,所以我无法从表中获取名字和姓氏。

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

为了以防万一,将把它留在这里。

我需要传递"用户"而不是"登录用户":

return View(user);

最新更新