请考虑以下代码段。
var query = (from a in db.MyEntity
where a.MyEntityId == id
select a.Team).FirstOrDefault();
string userName = userDto.UserName.Replace('.', ' ');
string[] teamArray = query.Split(new char[] { ',' });
for (int i = 0; i < teamArray.Count(); i++)
{
if (!teamArray[i].Contains(userName, StringComparison.OrdinalIgnoreCase))
{
return View("Unauthorized");
}
}
我在数据库中有一个列,其中包含,
个分隔值,即
User 1, User 2, User 3 ...
我无法控制此列中的用户数量。我想要实现的目的是向任何不在该列中的用户显示Unauthorized
页面。我使用HttpContext.Current.User.Identity.Name.Split('\\')[1];
获取登录用户的用户名为了测试目的,我将我的用户名和另一个用户名放在列中,但似乎是检查每个用户名然后返回给我{{1因为我的用户名在列中,所以它不应该这样做。有人可以告诉我,我在哪里出错。
以下是我使用
的扩展方法Unauthorized
答案 0 :(得分:2)
但似乎正在检查每个用户名
是的,这正是你在这里所做的
string[] teamArray = query.Split(new char[] { ',' });
for (int i = 0; i < teamArray.Count(); i++)
{
if (!teamArray[i].Contains(userName, StringComparison.OrdinalIgnoreCase))
{
return View("Unauthorized");
}
}
您在Contains
中为每个字符串调用teamArray
方法。由于您的userName
只匹配一个(如果有的话),所有其他人都会返回错误。
看来你混淆了两件事。您想要检查teamArray
中的任何字符串是否匹配userName
:
string[] teamArray = query.Split(new char[] { ',' });
if (!teamArray.Contains(userName, StringComparer.OrdinalIgnoreCase))
return View("Unauthorized");
请使用此teamArray.Contains(...)
检查userName
内是否有teamArray
。
答案 1 :(得分:0)
见下文:
public static bool Contains(string source, string toCheck)
{
var results = Array.FindAll(source.split(','), s => s.Equals(toCheck));
if(results.Length > 0)
return true;
else
return false;
}
谢谢。