Можно ли получить контроллер, action и routeValues ​​из URL (на основе маршрутов Global.asax)? - PullRequest
1 голос
/ 10 января 2010

У меня есть URL. Можно ли как-то получить имя контроллера и действия и значения маршрута? (который обычно генерируется платформой .NET MVC на основе определения в global.asax)

Ответы [ 3 ]

7 голосов
/ 10 января 2010

Где и когда вы хотите получить значения?

Из вашего кода вы можете позвонить:

HttpContextBase context = new HttpContextWrapper(HttpContext.Current);
RouteData rd = RouteTable.Routes.GetRouteData(context);

if (rd != null) {
    string controllerName = rd.GetRequiredString("controller");
    string actionName = rd.GetRequiredString("action");
}

Обратите внимание, что это работает только из кода вашего приложения. Определенно нет способа получить эту информацию о других сайтах и ​​приложениях.

3 голосов
/ 10 января 2010
0 голосов
/ 16 июня 2017

Вы можете получить текущее имя контроллера и имя действия, добавив метод Application_BeginRequest в свой файл Global.asaxcs.

Вот пример:

    protected void Application_BeginRequest(object sender, EventArgs args)
    {
        HttpContextBase currentContext = new HttpContextWrapper(HttpContext.Current);

        UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
        RouteData routeData = urlHelper.RouteCollection.GetRouteData(currentContext);

        string url = currentContext.Request.Url.AbsoluteUri;
        string httpMethod = currentContext.Request.HttpMethod;   
        string action = routeData.Values["action"] as string;
        string controller = routeData.Values["controller"] as string;

        if (!string.IsNullOrEmpty(controller) && !string.IsNullOrEmpty(action))
        {
           Logger.Log( controller, action, url, httpMethod);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...