MVC5在使用属性路由时获取区域名称
MVC5 get area name when using attribute routing
我有一个旧的 MVC3 站点,我可以在其中使用以下代码获取路线区域:
object oArea;
RouteData.DataTokens.TryGetValue("area", out aArea);
我正在创建一个新的 MVC5 应用程序并开始使用基于属性的路由,如下所示:
[RouteArea("Area")]
[RoutePrefix("Test")]
public TestController
{
public ActionResult Index()
{
return View("Index");
}
}
不幸的是,当您使用基于属性的路由时,RouteData.DataTokens 集合似乎是空的。区域信息出现在"MS_DirectRouteMatches"中的RouteData下,所以可以这样获取数据:
RouteData.Values["MS_DirectRouteMatches"])[0].DataTokens.TryGetValue("area", out oArea);
但是,我想知道是否有更简单、更安全或更好的方法来获取 MVC5 中的区域数据。区域名称实际上是一个更大的应用程序中的子工具名称,用于基础控制器初始化中的一些逻辑。
唯一的"safe"方法是首先检查MS_DirectRouteMatches
是否存在,如果存在则只探测该区域,如果存在则回退到原始RouteData
对象没有。
string area;
RouteData routeData = HttpContext.Request.RequestContext.RouteData;
if (routeData != null)
{
if (routeData.Values.ContainsKey("MS_DirectRouteMatches"))
{
routeData = ((IEnumerable<RouteData>)routeData.Values["MS_DirectRouteMatches"]).First();
}
routeData.DataTokens.TryGetValue("area", out area);
}
我有一个旧的 MVC3 站点,我可以在其中使用以下代码获取路线区域:
object oArea;
RouteData.DataTokens.TryGetValue("area", out aArea);
我正在创建一个新的 MVC5 应用程序并开始使用基于属性的路由,如下所示:
[RouteArea("Area")]
[RoutePrefix("Test")]
public TestController
{
public ActionResult Index()
{
return View("Index");
}
}
不幸的是,当您使用基于属性的路由时,RouteData.DataTokens 集合似乎是空的。区域信息出现在"MS_DirectRouteMatches"中的RouteData下,所以可以这样获取数据:
RouteData.Values["MS_DirectRouteMatches"])[0].DataTokens.TryGetValue("area", out oArea);
但是,我想知道是否有更简单、更安全或更好的方法来获取 MVC5 中的区域数据。区域名称实际上是一个更大的应用程序中的子工具名称,用于基础控制器初始化中的一些逻辑。
唯一的"safe"方法是首先检查MS_DirectRouteMatches
是否存在,如果存在则只探测该区域,如果存在则回退到原始RouteData
对象没有。
string area;
RouteData routeData = HttpContext.Request.RequestContext.RouteData;
if (routeData != null)
{
if (routeData.Values.ContainsKey("MS_DirectRouteMatches"))
{
routeData = ((IEnumerable<RouteData>)routeData.Values["MS_DirectRouteMatches"]).First();
}
routeData.DataTokens.TryGetValue("area", out area);
}