プロジェクトに Asp.Net WebAPI を使用しています。私は現在、認証と承認に取り組んでいます。
リクエストの HTTP 認証ヘッダーをチェックし、ID とユーザー プロファイルを作成する messageHandler があります。ただし、コントローラー アクション (またはコントローラーのみ) に、アクションが必要とする可能性のあるクレームを付けたいと考えています (ユーザーが持つことができるクレームがたくさんあるので、すべてをロードしたくありません)。
例えば:
public class MyController : ApiController
{
[LoadClaims("SomeClaim", "SomeOtherClaim", "etc")]
public string Get()
{
if (HasClaim("SomeClaim"))
return "Awesome";
return "Bummer";
}
}
認証メッセージ ハンドラー内で、属性を確認し、必要なものだけに基づいて DB からクレームを取得できるようにしたいと考えています。そのためには、ルートに基づいてヒットするコントローラーとアクションを知る必要があります。
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
...
var routeData = request.GetRouteData();
object controllerName;
object actionName;
routeData.Values.TryGetValue("controller", out controllerName);
...
だから私はそれを得ることができます。しかし今、これを反映できるタイプに変換する必要がありますが、私が持っているのはコントローラー名だけです (完全なクラス名や名前空間でさえありません)。これを、属性などを取得するために反映できるものにするにはどうすればよいですか?
DefaultHttpControllerSelector
WebAPIスタックがどのようにそれを行うかを調べていますが、HttpControllerTypeCache
. これは内部クラスなので、インスタンスを作成できません。ターゲットコントローラーのタイプを取得する正しい方法は何ですか?