2011-10-21 5 views
2

私は.NET 3.5でasp.net mvc 2サイトを実行しています.Global.asaxのGetVaryByCustomStringハンドラ内のルーティング値にアクセスしたいと思います。 HttpContextが関数に渡された場合、特定のルート値にアクセスする方法(もしあれば)は不明です。参考のためGetVaryByCustomStringでasp.net mvcルート値にアクセスするには?

、ここGetVaryByCustomString

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

の署名がある誰かが正しい方向に私を指すことができますか?

答えて

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

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

それはトリックでした - ありがとう! – DanP

+1

これはASP.MET MVC 4以降では動作しません。httpContext.Handlerは常にnullです。 –

-1

はここ以降、これは正しい方法で誰のために

httpContext.Current.Request.RequestContext.RouteData 
+0

これはASP.Net 4.5ではもう機能しません(動作が変更されたか、これが一度も機能しなかったかどうかはわかりません) ページを生成した後、RouteDataにデータが入力されましたが、 populate ...はルーティングを行う前にキャッシュの状態をチェックします。 – Mog0

6

は、ASP.NET MVC 4.0でこの仕事をしようとして簡単な方法です。

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

これはハックのビットが、キャッシュ検証をルーティングする前に行うので、経路データが利用できないので、これは、現時点で唯一の解決策です。

関連する問題