从消息处理程序(不是控制器)中获取控制器和操作?

时间:2015-12-29 17:44:20

标签: routing handler message

如何在web api 2,framework 4.5中的消息处理程序中从请求中提取控制器和操作名称?例如,这将获得完整的URL:`                 Uri url = request.RequestUri;                 string originalUrl = url.OriginalString;

使用属性路由`

1 个答案:

答案 0 :(得分:1)

var config = request.GetConfiguration();
var routeData = config.Routes.GetRouteData(request);
var controllerContext = new HttpControllerContext(config, routeData, request);

request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData;
controllerContext.RouteData = routeData;

// get controller type
var controllerDescriptor = new DefaultHttpControllerSelector(config).SelectController(request);
var controllerName = controllerDescriptor.ControllerName;
controllerContext.ControllerDescriptor = controllerDescriptor;

// get action name
var actionMapping = new ApiControllerActionSelector().SelectAction(controllerContext);
var actionName = actionMapping.ActionName;

所有功劳归于this gist