Asp.net mvc 3 自定义属性对控制器有效,但对方法无效
我创建了一个自定义属性:Asp.net mvc 3 自定义属性对控制器有效,但对方法无效,asp.net-mvc-3,methods,attributes,controller,authorization,Asp.net Mvc 3,Methods,Attributes,Controller,Authorization,我创建了一个自定义属性: public AjaxAwareAuthorizeAttribute : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { base.OnAuthorization(filterContext); if(filterContext.Result is HttpUnauthorizedResu
public AjaxAwareAuthorizeAttribute : AuthorizeAttribute {
public override void OnAuthorization(AuthorizationContext filterContext) {
base.OnAuthorization(filterContext);
if(filterContext.Result is HttpUnauthorizedResult && filterContext.HttpContext.Request.IsAjaxRequest()) {
filterContext.HttpContext.Items["RequestWasNotAuthorized"] = true;
}
}
}
当我将此应用于控制器类时,将触发OnAuthorization事件,并按预期执行上面的处理程序,但当它应用于控制器中的任何方法时,什么都不会发生 机器人寿司有点意思 我的引导代码中包含以下内容:
var oldProvider = FilterProviders.Providers.Single(f => f is FilterAttributeFilterProvider);
FilterProviders.Providers.Remove(oldProvider);
var newProvider = new CustomFilterAttributeFilterProvider(kernel);
FilterProviders.Providers.Add(newProvider);
这是我在添加自定义属性后添加的代码。当我删除这些代码行时,属性会按预期触发。我想在这里给Robotsushi一个奖励,但他没有回答 我的代码的真正问题在于CustomFilterAttributeFilterProvider代码
protected override IEnumerable<FilterAttributes> GetActionAttributes(ControllerContext controllerContext, ActionDescriptor actionDescriptor) {
//incorrect code
//var attributes = base.GetControllerAction(controllerContext, actionDescriptor);
//correct code
var attributes = base.GetActionAttributes(controllerContext, actionDescriptor);
受保护的覆盖IEnumerable GetActionAttributes(ControllerContext ControllerContext,ActionDescriptor ActionDescriptor){
//错误代码
//var attributes=base.GetControllerAction(controllerContext,actionDescriptor);
//正确代码
var attributes=base.GetActionAttributes(controllerContext,actionDescriptor);
它在我的机器上工作。你确定控制器中的方法被命中了吗?它们可以访问吗?你可以单步执行吗?我当然可以。是的,我在控制器方法中设置了一个断点,它被命中了,但属性中的OnAuthorization方法从未执行。我应该补充一点,我非常确定这在我首先对它进行了编码。代码来自:您是否在应用程序的引导程序或Global.asax中注册了属性/验证程序类?无需注册属性,因为它们是在编译时添加的代码。