我尝试为我的REST API实现我自己的AuthorizeAttribute,该API是我使用WCF Web API预览版6构建的。
不幸的是,只有构造函数被调用,但没有任何方法被调用。我是不是在登记时遗漏了什么?
[BasicHttpAuthorize]
[WebGet(UriTemplate = "")]
public IEnumerable<Supertext.API.Order> Get()
{
这是我的超级简化代码。
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class BasicHttpAuthorizeAttribute: AuthorizeAttribute
{
public BasicHttpAuthorizeAttribute()
{
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return true;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
//do the authorization
}
}
但正如我所说,AuthorizeCore和OnAuthorization方法都从未被调用过。
有什么想法吗?
AuthorizeAttribute
和操作过滤器通常是ASP.NET MVC特定的工件。它们与WCF无关。用它装饰WCF操作合同不会有多大效果。
由于使用AuthorizeAttribute不适用于WCF Web API,因此我提出了自己的解决方案
我已经构建了一个自定义的HttpOperationHandler,并将其与Attribute相结合,因此我获得了与MVC AuthorizeAttribute类似的功能。
结果如下:
http://remy.supertext.ch/2012/02/basic-authentication-with-wcf-web-api-preview-6/
我能够在没有HttpOperationHandler
的情况下完成上面的实现,但继承了System.Web.Http.AuthorizeAttribute
而不是System.Web.Mvc.AuthorizeAttribute
。也许一旦MCV和以前的WCF团队完全合并,这两个实现就会成为中心,但就目前而言,名称空间的更改帮助很大!
请参阅ref:ASP.NET Web API 的自定义MVC授权属性