3

我有一个 HttpModule 在执行 web api 控制器的操作之前对请求进行一些处理。我希望能够确定请求将执行哪些控制器/动作,以便我可以提前检查可能在控制器/动作上设置的一些属性。如何发现特定请求 URI 将调用的控制器/操作?

在 HttpModule 中,显然我可以从 RouteTable 中获取 RouteData——我如何使用它来找出将被调用的控制器和操作的类型(或者最好是方法信息,或者至少是方法名称)?

4

2 回答 2

1

这是一个示例,说明如何获取ActionDescriptorControllerDescriptor来自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(); 
于 2012-08-31T17:53:16.763 回答
1

HttpModule 不是你应该做这些事情的地方。无论请求是否进入 ASP.NET Web API 管道,都会为每个请求执行一个 HttpModule。

您需要的是一个消息处理程序,它将像 HttpModule 一样用于 ASP.NET Web API 请求。

于 2012-09-02T12:39:58.783 回答