2011-07-28 6 views
2

私はActionFilterを作成しており、ActionExecutingContextパラメータからエリア名を取得する必要があります(クイックダーティーなログインベースのセキュリティを実装したい)。出来ますか?ActionExecutingContextからエリア名を取得

+2

*可能性* [ASP.NET MVCの重複 - で現在の領域名を取得します。ビューまたはコントローラ](http://stackoverflow.com/questions/27236) 8934/asp-net-mvc-get-current-area-name-in-view-or-controller) – bzlm

答えて

2

MVCソースコードから:

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); 
    } 
+0

残念ながら、これらのメソッドは内部クラスの内部にあります:) – SiberianGuy

+0

しかし、MVC Futuresには同様のパブリッククラスがあります – SiberianGuy

0

使用

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

コード

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; 
    } 
} 
関連する問題