【问题标题】:Custom MVC AuthorizeAttribute for WCF Web API Preview 6WCF Web API Preview 6 的自定义 MVC AuthorizeAttribute
【发布时间】:2012-02-02 12:45:22
【问题描述】:

我尝试为使用 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 方法都没有被调用过。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      由于使用 AuthorizeAttribute 不适用于 WCF Web API,我想出了自己的解决方案。
      我已经构建了一个自定义 HttpOperationHandler 并将它与一个属性结合起来,所以我得到了与 MVC AuthorizeAttribute 类似的功能。

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

      【讨论】:

        【解决方案3】:

        我能够在没有HttpOperationHandler 的情况下完成上面的实现,但继承自System.Web.Http.AuthorizeAttribute 而不是System.Web.Mvc.AuthorizeAttribute。也许一旦 MCV 和以前的 WCF 团队完全合并,这两个实现就会成为中心,但就目前而言,命名空间的改变有很大帮助!

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

        【讨论】:

        • 谢谢。实际上刚刚切换到新的 MVC 4 Web API 并让它现在与 AuthorizeAttribute 一起工作。等我有时间写点什么就发布解决方案。
        猜你喜欢
        • 2012-03-17
        • 1970-01-01
        • 2019-01-05
        • 1970-01-01
        • 2014-12-23
        • 1970-01-01
        • 1970-01-01
        • 2012-09-19
        • 1970-01-01
        相关资源
        最近更新 更多