在c#中调用方法时如何执行属性
How to execute an attribute when invoking a method in c#
我有办法
[AppAuthorize]
public ActionResult StolenCar(object claimContext)
{
return View("StolenCar");
}
我的属性是这样的代码。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class AppAuthorize : Vairs.Presentation.AppAuthorizationAttribute
{
public bool ConditionalAuthentication
{
get;
set;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
bool requireAuthentication = true;
if (ConditionalAuthentication)
{
}
if (requireAuthentication)
{
var appContext = SecurityContext.Current as SitecoreSecurityContext;
if (appContext != null)
{
appContext.LoginPage = ConfigurationManager.AppSettings[SecurityPaths.Login];
appContext.LogoffPage = ConfigurationManager.AppSettings[SecurityPaths.Logout];
}
if ((appContext != null) && this.RedirectToLogin && !string.IsNullOrEmpty(appContext.LoginPage))
{
appContext.RedirectToLogin = true;
}
base.HandleUnauthorizedRequest(filterContext);
}
}
}
我想 运行 StolenCar 在 c# 中动态方法。
Type magicType = Type.GetType(controllerFullName);
MethodInfo magicMethod = magicType.GetMethod(actionName);
ConstructorInfo magicConstructor =magicType.GetConstructor(Type.EmptyTypes);
object magicClassObject = magicConstructor.Invoke(new object[] { });
var result = magicMethod.Invoke(magicClassObject, new object[] { parameters }) as ActionResult;
return result;
这样我可以调用 StolenCar 方法但它不会调用 AppAuthorize 属性。有什么办法吗?
除了一些系统内置的属性外,其他属性并不神奇。
它们只是元数据、附加到 class、会员等的额外信息
如果您希望这些属性是 "executed",您必须自己完成。
在您的上下文中,MVC 已经为您完成了它所知道的属性,但是如果您开始自己调用这些方法,那么您需要发现并处理这些属性如有必要, .NET 中没有任何东西可以自动为您完成。
您可能想尝试从 ActionFilterAttribute
继承并覆盖 OnActionExecuting
方法:
public class YourAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
base.OnActionExecuting(context);
//Your code goes here
}
}
我有办法
[AppAuthorize]
public ActionResult StolenCar(object claimContext)
{
return View("StolenCar");
}
我的属性是这样的代码。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class AppAuthorize : Vairs.Presentation.AppAuthorizationAttribute
{
public bool ConditionalAuthentication
{
get;
set;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
bool requireAuthentication = true;
if (ConditionalAuthentication)
{
}
if (requireAuthentication)
{
var appContext = SecurityContext.Current as SitecoreSecurityContext;
if (appContext != null)
{
appContext.LoginPage = ConfigurationManager.AppSettings[SecurityPaths.Login];
appContext.LogoffPage = ConfigurationManager.AppSettings[SecurityPaths.Logout];
}
if ((appContext != null) && this.RedirectToLogin && !string.IsNullOrEmpty(appContext.LoginPage))
{
appContext.RedirectToLogin = true;
}
base.HandleUnauthorizedRequest(filterContext);
}
}
}
我想 运行 StolenCar 在 c# 中动态方法。
Type magicType = Type.GetType(controllerFullName);
MethodInfo magicMethod = magicType.GetMethod(actionName);
ConstructorInfo magicConstructor =magicType.GetConstructor(Type.EmptyTypes);
object magicClassObject = magicConstructor.Invoke(new object[] { });
var result = magicMethod.Invoke(magicClassObject, new object[] { parameters }) as ActionResult;
return result;
这样我可以调用 StolenCar 方法但它不会调用 AppAuthorize 属性。有什么办法吗?
除了一些系统内置的属性外,其他属性并不神奇。
它们只是元数据、附加到 class、会员等的额外信息
如果您希望这些属性是 "executed",您必须自己完成。
在您的上下文中,MVC 已经为您完成了它所知道的属性,但是如果您开始自己调用这些方法,那么您需要发现并处理这些属性如有必要, .NET 中没有任何东西可以自动为您完成。
您可能想尝试从 ActionFilterAttribute
继承并覆盖 OnActionExecuting
方法:
public class YourAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
base.OnActionExecuting(context);
//Your code goes here
}
}