WCF Web API Preview 6的自定义MVC AuthorizeAttribute

时间:2012-02-02 12:45:23

标签: asp.net-mvc asp.net-mvc-3 wcf rest

我尝试为我使用WCF Web API Preview 6构建的REST API实现自己的AuthorizeAttribute。

不幸的是只有构造函数被调用,而不是方法。我错过了注册的内容吗?

[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方法都没有被调用过。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

AuthorizeAttribute和动作过滤器通常是ASP.NET MVC特定的工件。它们与WCF无关。用它来装饰WCF运营合同不会有太大影响。

答案 1 :(得分:0)

由于使用AuthorizeAttribute不能与WCF Web API一起使用,我提出了自己的解决方案。
我已经构建了一个自定义的HttpOperationHandler并将其与一个Attribute相结合,因此我获得了与MVC AuthorizeAttribute类似的功能。

结果如下:
http://remy.supertext.ch/2012/02/basic-authentication-with-wcf-web-api-preview-6/

答案 2 :(得分:0)

我能够在没有HttpOperationHandler的情况下完成上述实施,但继承自System.Web.Http.AuthorizeAttribute而不是System.Web.Mvc.AuthorizeAttribute。也许一旦MCV和前WCF团队完全合并,这两个实现将会出现在中心,但就目前而言,名称空间的变化有助于实现这一目标!

参见参考:Custom MVC AuthorizeAttribute for ASP.NET Web API