2013-03-06 65 views
2

我有一个使用旧API的webservice。几乎我所有的服务处理程序都需要身份验证,因此我使用服务级别的身份验证属性。ServiceStack:如何查看当前请求的处理程序是否需要身份验证

我所有的服务都实现了一个自定义的基本服务,它使用OnBeforeExecute来填充一些与认证有关的属性。

是否有一种快速的方法来查看当前请求的处理程序是否需要OnBeforeExecute方法中的身份验证?

我不希望通过使用反射来查看属性,因为我知道这是一个相当慢的操作。我也期待在ServiceStack系统已经某处有这个信息在其腹部:)


我最终什么事做

由于我的项目有,我使用身份验证的ApplyTo参数服务禁用一些处理程序的身份验证要求,我结束了以下。

protected override void OnBeforeExecute(TRequestDto request) 
{ 
    base.OnBeforeExecute(request); 

    var attr = FilterAttributeCache.GetRequestFilterAttributes(request.GetType()).OfType<AuthenticateAttribute>().FirstOrDefault(); 
    if (attr != null) 
    { 
     ApplyTo reqmethod = base.Request.HttpMethodAsApplyTo(); 
     if ((attr.ApplyTo & reqmethod) == reqmethod) 
     { 
      // 
      // do stuff that should only be done when 
      // the handler requires authentication 
      // 
     } 
    } 
} 

回答

2

没有什么特别之处Authentication请求过滤器属性,除了它具有lowest priority所以它首先执行。

ServiceStack确实保持所有的FilterAttributeCache属性请求DTO了,所以你可以使用这个API,以确定是否AuthenticateAttribute针对特定服务定义,如:

var hasAuth = FilterAttributeCache.GetRequestFilterAttributes(request.GetType()) 
    .OfType<AuthenticateAttribute>().FirstOrDefault() != null; 
+0

谢谢Mythz :)我肯定会有一些内置的巧妙方式 – Pingvinen 2013-03-06 16:11:11

相关问题