如何在GetVaryByCustomString中访问asp.net mvc路由值?

时间:2011-10-21 15:04:22

标签: asp.net asp.net-mvc outputcache

我正在.NET 3.5下运行asp.net mvc 2站点,我想在Global.asax中的GetVaryByCustomString处理程序中访问路由值。鉴于传递给函数的HttpContext,我不清楚如何(如果有的话)访问特定的路由值。

供参考,以下是GetVaryByCustomString

的签名
public override string GetVaryByCustomString(HttpContext context, string custom)
{
    // how do I get at route values here from context?
}

有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:6)

对于任何试图在ASP.NET MVC 4.0上进行此工作的人来说,这是正确的方法。

 HttpContextBase currentContext = new HttpContextWrapper(context);
 RouteData routeData = RouteTable.Routes.GetRouteData(currentContext);

这有点破解,但这是目前唯一的解决方案,因为在路由之前执行缓存验证,因此路由数据不可用。

答案 1 :(得分:3)

var routeData = ((MvcHandler)httpContext.Handler).RequestContext.RouteData;

var routeValues = routeData.Values;
var matchedRouteBase = routeData.Route;
var matchedRoute = matchedRouteBase as Route

答案 2 :(得分:-1)

这是一种更简单的方法

httpContext.Current.Request.RequestContext.RouteData