2012-03-05 33 views
5

私はStackOverflowをかなり新しくしていますので、私の無知の兆候は許してください。 :)ASP.NET MVC C#クラスのコントローラ名とアクション名を取得します

私はVisual Studio 2010(C#で書かれたコントローラ)のMVCアプリケーションには多少の問題があります。 アプリケーションの動作履歴を生成するメソッドを作成したいので、そのたびに使用されるコントローラとアクションの名前を取得する必要があります。残念ながら、私のコントローラ名を保持する文字列の最初の文字は、常に欠落しています。 私はこのコードを使用:

OwnedContextは、次のように定義されて
string url = HttpContext.Current.Request.RawUrl; 
    RouteData route = RouteTable.Routes.GetRouteData(new OwnedContext(url)); 
    var values = route.Values; 
    string controllerName = values["controller"].ToString(); 
    string actionName = values["action"].ToString(); 

private class OwnedContext : HttpContextBase 
    { 
     private readonly HttpRequestBase mockHttpRequestBase; 

     public OwnedContext(string appRelativeUrl) 
     { 
      this.mockHttpRequestBase = new OwnedRequest(appRelativeUrl); 
     } 

     public override HttpRequestBase Request 
     { 
      get { return mockHttpRequestBase; } 
     } 
    } 

アクション名が正しく保存されているが、私はこのコードをデバッグするとき、私はコントローラ名の文字列はの名前を保持していることがわかりコントローラであるが、最初の(Capital)文字は、url文字列がこのパターンの値を保持していても、常に欠落している:/ controller/action。

私はポインター、コード例、またはその理由を理解しています。私の説明が正確でない場合は、私はそれを改善します。事前に

感謝:)

EDIT:SOLUTIONはFOUND:

は(一種の)問題が見つかりました:OwnedContext(私の元の質問で定義されている)に何か問題がありました。

のHttpContextにカスタムゲッターあり
string url = HttpContext.Current.Request.RawUrl; 
    RouteData route = RouteTable.Routes.GetRouteData(httpContext); 
    UrlHelper urlHelper = new UrlHelper(new RequestContext(httpContext, route)); 

    var routeValueDictionary = urlHelper.RequestContext.RouteData.Values; 
    string controllerName = routeValueDictionary["controller"].ToString(); 
    string actionName = routeValueDictionary["action"].ToString(); 

public new HttpContextBase httpContext 
    { 
     get 
     { 
      HttpContextWrapper context = 
       new HttpContextWrapper(System.Web.HttpContext.Current); 
      return (HttpContextBase)context; 
     } 
    } 

私はOwnedContextを省略し、このようにしてHarHaHuが示唆されたが、元の問題が持続として、私はGetRouteDataのパラメータとしてのHttpContextを配置するまで、最初に私は、routeValueDictionaryを使用しました最終的に私のコントローラのフルネームを得ました(例えば:家具で、urnitureではなく)。

ヒントをお願いします。 :) これは誰かを助けることを願っています。がんばろう!

+0

global.asaxからルート定義を投稿する機会はありますか?明らかに何かが経路のURLから誤って翻訳されています。 – Dave

+0

my global.asaxには、MVC3アプリケーションテンプレートで生成されたデフォルトルートが含まれていました –

答えて

4
var routeValueDictionary = urlHelper.RequestContext.RouteData.Values; 

カスタムコンテキストでこれを使用します。

関連する問題