我有一个旧的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中的区域数据。区域名称实际上是较大应用程序中的子工具名称,用于基本控制器初始化中的某些逻辑。
答案 0 :(得分:1)
唯一的"安全"方法是首先检查是否存在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);
}