3

Web APIコントローラーのアクションが実行される前に、リクエストに対して何らかの処理を実行しているHttpModuleがあります。リクエストによって実行されるコントローラー/アクションを特定できるようにしたいので、コントローラー/アクションに事前に設定されている可能性のあるいくつかの属性を調べることができます。特定の要求URIが呼び出すコントローラー/アクションを見つけるにはどうすればよいですか?

HttpModuleでは、明らかにRouteTableからRouteDataを取得できます。これを使用して、呼び出されるコントローラーとアクションのタイプ(または、できればmethodinfo、または少なくともメソッド名)を見つけるにはどうすればよいですか?

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は、そのようなことを行う必要がある場所ではありません。HttpModuleは、要求がASP.NET Web APIパイプラインに送られるかどうかに関係なく、すべての要求に対して実行されます。

ここで必要なのは、ASP.NETWebAPI要求のHttpModuleとして機能するメッセージハンドラーです。

于 2012-09-02T12:39:58.783 に答える