【问题标题】:Custom Attribute Not Firing自定义属性未触发
【发布时间】:2014-09-12 11:20:25
【问题描述】:

我有一个项目,其中包含 MVC 和 Web API 控制器。它使用 Windows 身份验证。但是,我想使用自定义属性保护特定的 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 Auth 的控制器。

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    希望这会有所帮助。

    【讨论】:

    • 不,这会将过滤器注册为全局过滤器,即为所有请求调用它。
    【解决方案2】:

    终于解决了我的问题。我实际上需要重写 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.
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2020-12-21
      • 2019-03-13
      • 1970-01-01
      • 2015-11-20
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多