属性路由没有在routedata中获取索引操作

时间:2016-01-15 13:25:21

标签: asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing

我有以下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"]为空。

这是预期的行为,因为我认为我会将“索引”作为路线数据中的动作。如果这是预期的行为,您如何获得当前的操作名称?

1 个答案:

答案 0 :(得分:1)

我已经解决了我的问题,而不是使用上述方法获取RouteData,您可以直接从当前上下文中获取它:

HttpContext.Current.Request.RequestContext.RouteData.Values["action"].ToString()