ASP.NET MVC C# 获取控制器和方法名称在类中

5

我相对于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)。

感谢这些提示。 :) 希望这能帮助到某些人。祝好运!


有没有可能发布一下你在global.asax中的路由定义?显然从URL到路由之间出现了一些错误的转换。 - Dave
我的 global.asax 文件包含了使用 MVC3 应用程序模板生成的默认路由。 - Maciej Ogonowski
1个回答

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

在自定义的上下文中使用此功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接