古い API を使用する Web サービスがあります。ほとんどすべてのサービス ハンドラで認証が必要なため、サービス レベルで 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
//
}
}
}