1
我有AuthActivityAttribute类。这个类的目的是授权用户有权执行特定的活动。自定义属性C#不工作
属性类:
[AttributeUsage(AttributeTargets.All)]
public class AuthActivityAttribute : Attribute
{
#region Properties
public string ActivityName { get; set; }
#endregion
#region Constructor
public AuthActivityAttribute()
{
}
#endregion
#region MemberFunctions
private List<aspnetactivities> GetUserActivities(ApplicationUser currentUser)
{
IList<string> roles = DALAccessObjectObj.UserDALObj.GetUserRoles(currentUser);
List<aspnetactivities> lstAspnetActivites = new List<aspnetactivities>();
foreach (string role in roles)
{
List<aspnetactivities> activities = DALAccessObjectObj.UserDALObj.GetRoleActivity(role);
lstAspnetActivites.AddRange(activities);
}
return lstAspnetActivites;
}
public void ValidateUserActivity()
{
DALAccessObjectObj.UserDALObj = new UserDAL();
ApplicationUser currentUser = DALAccessObjectObj.UserDALObj.GetUserById(HttpContext.Current.User.Identity.GetUserId());
if (GetUserActivities(currentUser).Where(r => r.ActivityName.Equals(ActivityName, StringComparison.InvariantCultureIgnoreCase)
).Select(r => r).Count() > 0)
{
throw new Exception(string.Format("User is not allowed to perform activity named : {0}", ActivityName));
}
}
#endregion
}
我有一个帐户控制器类。我所需要的只是如果允许他进行注册活动,用户只能注册。但是,当我发送请求的属性不验证任何事情。请让我知道我错过了什么或什么?
类装饰有属性
public class AccountController : BaseApiController
{
[AuthActivityAttribute(ActivityName = "Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
// do something ...
}
}
例如:我们把验证像属性[的MaxLength(10)],以便它验证该属性的长度必须小于10或授权在C#属性。就像只有管理员可以访问特定的方法。所以这是我需要实现的东西
[Authorize("Administrator")]
public void DeleteUser()
{
// do something
}
我想要什么?
[AuthActivity("DeleteUser")]
public void DeleteUser()
{
// do something
}
那么你期望使用该属性来执行验证?什么是'PlanhayAttributeBase'? –
亲爱的@JonSkeet请再次检查我编辑它。 –
那么,你已经改变了基类。您仍然没有解释为什么您期望该属性自动执行某些操作。属性不会神奇地让代码执行 - 某些事物必须*找到*所有相关的属性并相应地采取行动。你希望在你的情况下做什么? –