这是MCTS 70-515考试练习测试的一个问题。
请帮助解决正确的2个答案
您正在实现一个允许用户查看和编辑数据的ASP.NET MVC 2 Web应用程序。您需要确保仅登录用户可以访问控制器的“编辑”操作。您可以添加到“编辑”操作以实现此目标的两个可能属性是什么?
(每个正确的答案都提供了一个完整的解决方案。选择两个。)
答案 0 :(得分:6)
查看AuthorizeAttribute
的源代码,表明没有通配符“*”。
如果[Authorize(Users = "")]
导致“没有人”可以访问该行动,则没有任何意义。
AuthorizeAttribute的源代码
protected virtual bool AuthorizeCore(HttpContextBase httpContext) {
if (httpContext == null) {
throw new ArgumentNullException("httpContext");
}
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated) {
return false;
}
if (_usersSplit.Length > 0 && !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase)) {
return false;
}
if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole)) {
return false;
}
return true;
}
Role
和Users
属性。
public string Roles {
get {
return _roles ?? String.Empty;
}
set {
_roles = value;
_rolesSplit = SplitString(value); // simple split by comma
}
}
public string Users {
get {
return _users ?? String.Empty;
}
set {
_users = value;
_usersSplit = SplitString(value); // simple split by comma
}
}
答案 1 :(得分:2)
编辑:我已将此更改为现在正确,只是补充dknaack的正确答案
使用[Authorize]
修饰操作意味着必须对用户进行身份验证。
因此,如果您希望任何已登录的用户能够访问某个操作,那么放置[Authorize]
是正常的。
dknaack已经提到了源代码,所以他的答案必须正确,即使它对我来说似乎有点奇怪。但显然是对的!
只是要添加,如果_usersSplit
与逗号上的正常分割相似,那么我们希望_usersSplit.Length
1
_users =""
时我仍然是正确的RemoveEmptyEntries
,但我想split功能正在使用{{1}}选项。现在不能参考这个来源(昨天有膝盖操作,暂时不允许在电脑上使用 - 大声笑)。
空字符串不是用户或角色的有效名称。见这里:http://msdn.microsoft.com/en-us/library/8fw7xh74(v=VS.100).aspx
如果任何指定的用户,您应该抛出ArgumentException 名称或角色名称是空字符串,如果是,则为ArgumentNullException 任何指定的用户名或角色名称都为null(Nothing in Visual Basic)。