我尝试为我使用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方法都没有被调用过。
有什么想法吗?
答案 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团队完全合并,这两个实现将会出现在中心,但就目前而言,名称空间的变化有助于实现这一目标!