我正在尝试弄清楚我需要提供哪些数据
ApiControllerActionSelector.SelectAction(controllerContext)
以准确确定将调用的操作。
我需要在
Application_PostResolveRequestCache
中执行此操作,因为我必须使用确定的结果来决定将为给定接口注入几个不同依赖项中的哪一个。
为了创建我传递的
HttpControllerContext
,我一直在使用这种方法(几乎逐字复制自HttpControllerDispatcher
):
private static HttpControllerContext CreateControllerContext(
HttpRequestMessage request,
HttpControllerDescriptor controllerDescriptor
)
{
HttpConfiguration configuration1 = controllerDescriptor.Configuration;
HttpConfiguration configuration2 = request.GetConfiguration();
if (configuration2 == null)
{
request.SetConfiguration(configuration1);
}
else if (configuration2 != configuration1)
{
request.SetConfiguration(configuration1);
}
HttpRequestContext httpRequestContext1 = request.GetRequestContext();
var controller = (IHttpController) FormatterServices.GetUninitializedObject(controllerDescriptor.ControllerType);
return new HttpControllerContext(httpRequestContext1, request, controllerDescriptor, controller);
}
当我调用这个方法时,返回的
RouteData
的HttpControllerContext
属性总是null
。我一直无法弄清楚从哪里得到“正确”的,我认为这是我在这里唯一缺少的一块。
主要问题仍然存在于标题中:在创建将处理当前请求的控制器之前,我如何确定将调用哪个操作?