我使用Asp.Net的WebAPI的一个项目。 我目前工作的认证和授权。
我有一个的MessageHandler,将检查请求的HTTP认证头,并建立自己的身份和用户配置文件。 不过,我想用注释声称,行动可能需要(我们有很多的用户可以拥有的权利要求的,所以我不希望加载它们全部)我的控制器动作(或只是控制器)。
例如:
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
。 这是一个内部类,所以我不能创建一个实例。 什么是去获得目标控制器类型的正确方法是什么?