属性路由未在路由数据中获取索引操作
Attribute routing not picking up index action in routedata
我有以下 MVC 控制器:
[RoutePrefix("our-brochure")]
[Route("{action=index}")]
public class OurBrochureController : Controller
{
public ActionResult Index()
{
return View();
}
}
效果很好 - 如果我转到 http://localhost/our-brochure
它会转到索引页面并按预期加载它
但是,对于我的导航,我有一个 NavModel
可以使用以下代码计算出当前控制器和操作:
var httpContext = new HttpContextWrapper(HttpContext.Current);
var routeData = System.Web.Routing.RouteTable.Routes.GetRouteData(httpContext);
var controllerName = routeData.Values["controller"].ToString();
var actionName = routeData.Values["action"].ToString();
这给了我正确的控制器名称 "OurBrochure" 但 routeData.Values["action"]
是空的。
这是预期的行为吗,因为我认为我会得到 "Index" 作为路由数据中的操作。如果这是预期的行为,您如何获得当前的操作名称?
我的问题已经解决了,不用上面的方法获取RouteData
,直接从Current Context中获取即可:
HttpContext.Current.Request.RequestContext.RouteData.Values["action"].ToString()
我有以下 MVC 控制器:
[RoutePrefix("our-brochure")]
[Route("{action=index}")]
public class OurBrochureController : Controller
{
public ActionResult Index()
{
return View();
}
}
效果很好 - 如果我转到 http://localhost/our-brochure
它会转到索引页面并按预期加载它
但是,对于我的导航,我有一个 NavModel
可以使用以下代码计算出当前控制器和操作:
var httpContext = new HttpContextWrapper(HttpContext.Current);
var routeData = System.Web.Routing.RouteTable.Routes.GetRouteData(httpContext);
var controllerName = routeData.Values["controller"].ToString();
var actionName = routeData.Values["action"].ToString();
这给了我正确的控制器名称 "OurBrochure" 但 routeData.Values["action"]
是空的。
这是预期的行为吗,因为我认为我会得到 "Index" 作为路由数据中的操作。如果这是预期的行为,您如何获得当前的操作名称?
我的问题已经解决了,不用上面的方法获取RouteData
,直接从Current Context中获取即可:
HttpContext.Current.Request.RequestContext.RouteData.Values["action"].ToString()