1

Я переключаюсь из старой библиотеки маршрутизации атрибутов в маршрутизацию asp.net MVC 5. Но теперь мое lang значение маршрута в Application_AcquireRequestStateASP.Net MVC 5 получить значения маршрутизации атрибута

// rootcontroller.cs  
[HttpGet] 
[Route("")] 
[Route("{lang}")] 
// old attribute routing worked: 
// [GET("/{lang}")] 
public ActionResult Index(string lang =null) 
{ 
    return View(); 
} 

// global.asax 
protected void Application_AcquireRequestState(object sender, EventArgs e) 
{ 
    var handler = Context.Handler as MvcHandler; 

    if (handler == null) 
     return; 
    var routeData = handler.RequestContext.RouteData; 

    var lang = routeData.Values["lang"]; // null instead for example 'de' 
    // ... set current culture 
} 

ответ

2

атрибута маршрутизации в MVC 5 null использует специальный ключ с именем «MS_DirectRouteMatches», который содержит список RouteData элементов. Я не уверен, почему они сделали это, поскольку кажется, что возможен только один элемент RouteData. Поэтому вам нужно проверить этот ключ и использовать его первое значение, если оно существует.

var routeData = handler.RequestContext.RouteData; 

if (routeData != null) 
{ 
    if (routeData.Values.ContainsKey("MS_DirectRouteMatches")) 
    { 
     routeData = ((IEnumerable<RouteData>)routeData.Values["MS_DirectRouteMatches"]).First(); 
    } 
} 

var lang = routeData.Values["lang"]; 
Смежные вопросы