我正在尝试根据登录用户的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);