ASP.Net MVC 5获取属性路由值

时间:2015-09-22 00:08:14

标签: c# asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing attributerouting

我从旧的属性路由库切换到捆绑的asp.net MVC 5路由。但现在lang

中的null路由值为Application_AcquireRequestState
// 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
}

1 个答案:

答案 0 :(得分:3)

MVC 5中的属性路由使用名为“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"];