我有一个使用旧 API 的网络服务。几乎我所有的服务处理程序都需要身份验证,因此我在服务级别上使用了 Authenticate 属性。
我所有的服务都实现了一个自定义的基础服务,它使用 OnBeforeExecute 来填充一些与身份验证相关的属性。
有没有一种快速的方法来查看当前请求的处理程序是否需要在 OnBeforeExecute 方法中进行身份验证?
我宁愿不必使用反射来查看属性,因为我知道这是一个相当缓慢的操作。我还希望 ServiceStack 系统已经在其腹部某处拥有此信息 :)
我最终做了什么:
由于我的项目有服务,我使用 Authenticate 的 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
//
}
}
}