Ich habe AuthActivityAttribute-Klasse. Der Zweck dieser Klasse besteht darin, zu autorisieren, dass der Benutzer berechtigt ist, bestimmte Aktivitäten auszuführen.Benutzerdefinierte Attribute C# funktioniert nicht
Attribut Klasse:
[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
}
Ich habe ein Konto Controller-Klasse. Alles, was ich brauche, ist Benutzer kann nur registriert werden, wenn er Registrierungsaktivität durchführen darf. Wenn ich jedoch die Anfrage sende, validiert das Attribut nichts. Bitte lass mich wissen, ob ich etwas vermisse oder was?
Klasse
public class AccountController : BaseApiController
{
[AuthActivityAttribute(ActivityName = "Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
// do something ...
}
}
zum Beispiel mit dem Attribut dekoriert: Wir setzen die Validierung auf dem Grundstück wie [MaxLength (10)], so bestätigt es, dass die Eigenschaft Länge von weniger als 10 oder Attribut in C# autorisieren müssen . Wie nur Admin kann auf die spezifische Methode zugreifen. Also das ist etwas, was ich erreichen muss
[Authorize("Administrator")]
public void DeleteUser()
{
// do something
}
Was ich will?
[AuthActivity("DeleteUser")]
public void DeleteUser()
{
// do something
}
Was haben Sie also erwartet, um das Attribut zur Validierung zu verwenden? Was ist 'PlanhayAttributeBase'? –
Liebe @JonSkeet Bitte überprüfen Sie noch einmal ich habe es bearbeitet. –
Nun, Sie haben die Basisklasse geändert. Sie haben immer noch nicht erklärt, warum Sie erwartet haben, dass das Attribut automatisch etwas bewirkt. Attribute machen nicht nur auf magische Weise Code ausgeführt - etwas muss alle relevanten Attribute * finden * und entsprechend handeln. Was erwarten Sie in Ihrem Fall? –