我有一个HttpModule在执行web api控制器操作之前对请求进行一些处理。我希望能够确定请求将执行哪些控制器/操作,以便我可以检查可能在控制器/操作上提前设置的一些属性。如何发现特定请求URI将调用的控制器/操作?
在HttpModule中,显然我可以从RouteTable获取RouteData - 我如何使用它来找出控制器的类型(或者最好是methodinfo,或者至少是方法名称)。将被调用的行动?
答案 0 :(得分:1)
以下是说明如何从ActionDescriptor
获取ControllerDescriptor
和RouteData
的示例:
var routeData = RouteTable.Routes.GetRouteData(requestContext.HttpContext);
if (routeData == null)
return false;
var controllerName = (string)routeData.Values["controller"];
var actionName = (string) routeData.Values["action"];
var controller = ControllerBuilder.Current.GetControllerFactory().CreateController(requestContext, controllerName);
if (controller == null)
return false;
var controllerType = controller.GetType();
var controllerDescriptor = new ReflectedControllerDescriptor(controllerType);
var actionDescriptors = controllerDescriptor.GetCanonicalActions();
答案 1 :(得分:1)
HttpModule不是你应该做这些事情的地方。无论请求是否进入ASP.NET Web API管道,都将为每个请求执行HttpModule。
这里需要的是Message Handler,它将作为ASP.NET Web API请求的HttpModule实现。