ASP.Net MVC 5 获取属性路由值
ASP.Net MVC 5 get attribute routing values
我从旧的属性路由库切换到捆绑的 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
}
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"];
我从旧的属性路由库切换到捆绑的 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
}
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"];