私は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ではなく)。
ヒントをお願いします。 :) これは誰かを助けることを願っています。がんばろう!
global.asaxからルート定義を投稿する機会はありますか?明らかに何かが経路のURLから誤って翻訳されています。 – Dave
my global.asaxには、MVC3アプリケーションテンプレートで生成されたデフォルトルートが含まれていました –