我可以将操作名称默认为ASP.NET MVC中路径中的控制器值吗?

时间:2011-02-19 21:42:19

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

我正在使用ASP.NET MVC3和区域......我希望有一个基本上{area}/{controller}/{id}的路由结构,并使动作等于{controller}值。我想这样做来模仿here描述的动作控制器模式,但是开箱即用MVC3。

基本上,如果这样做会很好(但事实并非如此):

context.MapRoute(
                "Request_Default",
                "Request/{controller}/{id}",
                new { action = "{controller}", id = UrlParameter.Optional }
            );

1 个答案:

答案 0 :(得分:2)

您可以编写自己的Route,或者只是在global.asax中添加这样的内容:

protected void Application_AcquireRequestState()
{
    var handler = Context.Handler as MvcHandler;

    if (handler == null)
        return;

    var routeData = handler.RequestContext.RouteData;

    var action = routeData.Values["action"];
    if (action == null)
        routeData.Values["action"] = routeData.GetRequiredString("controller");
}

并像这样映射路线:

context.MapRoute(
    "Request_Default",
    "Request/{controller}/{id}",
    new { id = UrlParameter.Optional }
);