WCF Web API预览版6的自定义MVC AuthorizeAttribute



我尝试为我的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授权属性

最新更新