我有一个包含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控制器?我在某个地方犯了一个简单的错误吗?
感谢。
答案 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.
}
}
希望如果其他人遇到麻烦,这会有所帮助。