Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 自定义属性对控制器有效,但对方法无效_Asp.net Mvc 3_Methods_Attributes_Controller_Authorization - Fatal编程技术网

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中注册了属性/验证程序类?无需注册属性,因为它们是在编译时添加的代码。