自定义属性不会触发

时间:2014-09-12 11:20:25

标签: asp.net-mvc asp.net-web-api authorize-attribute

我有一个包含MVC和Web API控制器的项目。它使用Windows Auth。但是,我想使用自定义属性保护特定的Web API操作。我创建了以下内容只是为了获得基本流程设置(最终它将检查用户的IP地址):

using System.Web;
using System.Web.Http;
using System.Web.Http.Filters;

namespace UoB.People.UserInterface.Mvc.Filters
{
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class IPAuthorize : AuthorizationFilterAttribute
    {
        protected bool AuthorizeCore(HttpContextBase httpContext)
        {
            return true;
        }
    }
}

我通过调用此属性修饰了我的Web API操作。问题是,当我在本地运行我的代码时,属性代码永远不会被命中。行动是。此特定操作属于不使用Windows身份验证的控制器。

为什么我的属性没有被调用?是否需要在某处注册?是否存在冲突,因为我的项目包含MVC和Web API控制器?我在某个地方犯了一个简单的错误吗?

感谢。

2 个答案:

答案 0 :(得分:2)

您需要在FilterConfig.cs类的RegisterGlobalFilters中注册您的属性。

希望这有帮助。

答案 1 :(得分:0)

终于找到了我的问题。我实际上需要覆盖OnAuthorization和AuthorizeCore。以下示例演示了这一点:

public class IPAuthorize : AuthorizeAttribute
{
    public string AuthorisedIPs { get; set; }

    public override void OnAuthorization(HttpActionContext actionContext)
    {
        if (AuthorizeCore((HttpContextBase)actionContext.Request.Properties["MS_HttpContext"]))
            return;

        base.HandleUnauthorizedRequest(actionContext);
    }

    protected bool AuthorizeCore(HttpContextBase httpContext)
    {
        // Logic here.
    }
}

希望如果其他人遇到麻烦,这会有所帮助。