我尝试为我用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方法都不会被调用。
有什么想法吗?
发布于 2012-02-02 20:47:22
AuthorizeAttribute和动作过滤器一般都是特定于ASP.NET的工件。它们与WCF没有任何关系。用它装饰一个WCF操作契约不会有太大的效果。
发布于 2012-02-03 20:49:27
由于使用AuthorizeAttribute不能与WCF Web API一起使用,因此我提出了自己的解决方案。
我已经构建了一个自定义的HttpOperationHandler,并将其与一个属性组合在一起,因此我获得了与MVC AuthorizeAttribute类似的功能。
结果如下:
http://remy.supertext.ch/2012/02/basic-authentication-with-wcf-web-api-preview-6/
发布于 2012-03-16 00:26:10
我可以在没有HttpOperationHandler的情况下完成上面的实现,但是继承了System.Web.Http.AuthorizeAttribute而不是System.Web.Mvc.AuthorizeAttribute。也许一旦MCV和以前的WCF团队完全合并,这两个实现将成为中心,但现在,名称空间的更改帮助很大!
https://stackoverflow.com/questions/9112531
复制相似问题