4

I'm writing an ActionFilter and need to get area name from ActionExecutingContext parameter (I want to implement quick-and-dirty login based security). Is it possible?

SiberianGuy
  • 24,674
  • 56
  • 152
  • 266
  • 2
    *possible* duplicate of [ASP.NET MVC - Get Current Area Name in View or Controller](http://stackoverflow.com/questions/2723689/asp-net-mvc-get-current-area-name-in-view-or-controller) – bzlm Jul 28 '11 at 16:38

2 Answers2

5

Usage

@Html.Controller();
@Html.Action();
@Html.Id();
@Html.Area();

Code

public static class HtmlRequestHelper
{
    public static string Id(this HtmlHelper htmlHelper)
    {
        var routeValues = HttpContext.Current.Request.RequestContext.RouteData.Values;

        if (routeValues.ContainsKey("id"))
            return (string)routeValues["id"];
        else if (HttpContext.Current.Request.QueryString.AllKeys.Contains("id"))
            return HttpContext.Current.Request.QueryString["id"];

        return string.Empty;
    }

    public static string Controller(this HtmlHelper htmlHelper)
    {
        var routeValues = HttpContext.Current.Request.RequestContext.RouteData.Values;

        if (routeValues.ContainsKey("controller"))
            return (string)routeValues["controller"];

        return string.Empty;
    }

    public static string Action(this HtmlHelper htmlHelper)
    {
        var routeValues = HttpContext.Current.Request.RequestContext.RouteData.Values;

        if (routeValues.ContainsKey("action"))
            return (string)routeValues["action"];

        return string.Empty;
    }

    public static string Area(this HtmlHelper htmlHelper)
    {
        var dataTokens = HttpContext.Current.Request.RequestContext.RouteData.DataTokens;

        if (dataTokens.ContainsKey("area"))
            return (string)dataTokens["area"];

        return string.Empty;
    }
}
Ghebrehiywet
  • 884
  • 3
  • 12
  • 20
2

From MVC Sourcecode:

    static string GetAreaName(RouteBase route)
    {
        var area = route as IRouteWithArea;
        if (area != null)
        {
            return area.Area;
        }
        var route2 = route as Route;
        if ((route2 != null) && (route2.DataTokens != null))
        {
            return (route2.DataTokens["area"] as string);
        }
        return null;
    }


    static string GetAreaName(RouteData routeData)
    {
        object obj2;
        if (routeData.DataTokens.TryGetValue("area", out obj2))
        {
            return (obj2 as string);
        }
        return GetAreaName(routeData.Route);
    }
Van Thoai Nguyen
  • 986
  • 9
  • 22