我相对于StackOverflow还很陌生,所以请原谅我的无知。:)
我在使用Visual Studio 2010的MVC应用程序(控制器使用C#编写)时遇到了一个小问题。 我想创建一个生成应用程序操作历史记录的方法,为此我想每次获取所使用的控制器和操作名字。不幸的是,保存控制器名称的字符串的第一个字母总是缺失。 我使用了这段代码:
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();
其中OwnedContext的定义如下:
private class OwnedContext : HttpContextBase
{
private readonly HttpRequestBase mockHttpRequestBase;
public OwnedContext(string appRelativeUrl)
{
this.mockHttpRequestBase = new OwnedRequest(appRelativeUrl);
}
public override HttpRequestBase Request
{
get { return mockHttpRequestBase; }
}
}
动作å��称已æ£ç¡®å˜å‚¨ï¼Œä½†æ˜¯å½“我调试æ¤ä»£ç �时,我å�‘ç�°controllerNameå—符串ä¿�å˜äº†æ�§åˆ¶å™¨çš„å��称,但首å—æ¯�(大写)始终缺失,å�³ä½¿urlå—符串具有这ç§�模å¼�的值:/ controller / action。
如æ�œæˆ‘çš„æ��è¿°ä¸�准确,请让我知é�“,我会改进它。我将感激任何æ��示ã€�代ç �示例或解释为什么会å�‘生这ç§�情况的帮助。
谢谢您��🙂
编辑:解决方案已找到:
找到问题了(有点):我的å�Ÿå§‹é—®é¢˜ä¸å®šä¹‰äº†OwnedContext,其ä¸æŸ�些内容出了问题。一开始我åƒ�HarHaHuå»ºè®®çš„é‚£æ ·ä½¿ç”¨routeValueDictionary,但是å�Ÿå§‹é—®é¢˜ä»�然å˜åœ¨ï¼Œç›´åˆ°æˆ‘å°†httpContext放置为GetRouteDataçš„å�‚数:
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();
当httpContext具有自定义getter时:
public new HttpContextBase httpContext
{
get
{
HttpContextWrapper context =
new HttpContextWrapper(System.Web.HttpContext.Current);
return (HttpContextBase)context;
}
}
我省略了OwnedContext,最终得到了我的控制器的全名(例如:Furniture而不是urniture)。
感谢这些提示。 :) 希望这能帮助到某些人。祝好运!