0

У меня есть старый MVC3 сайт, где я был в состоянии получить область маршрута, используя следующий код:MVC5 получить имя области при использовании атрибута маршрутизации

object oArea; 

RouteData.DataTokens.TryGetValue("area", out aArea); 

Я создаю новое приложение MVC5 и иметь начали использовать маршрутизацию на основе атрибута следующим образом:

[RouteArea("Area")] 
[RoutePrefix("Test")] 
public TestController 
{ 
    public ActionResult Index() 
    { 
     return View("Index"); 
    } 
} 

к сожалению, оказалось, что при использовании маршрутизации на основе атрибутов, то набор RouteData.DataTokens пуст. Область информация оказывается погребена под RouteData в «MS_DirectRouteMatches», так что вы можете получить следующие данные:

RouteData.Values["MS_DirectRouteMatches"])[0].DataTokens.TryGetValue("area", out oArea); 

Однако, мне было интересно, если есть проще, безопаснее и лучше, чтобы получить данные о площади в MVC5. Название области - это название под-инструмента в более крупном приложении, которое используется для некоторой логики в инициализации базового контроллера.

ответ

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

Я должен был ответить ранее, но это решение, с которым я пошел, даже до того, как увижу ваш ответ. Благодарю. – wigs