ASP.NET MVC 3 RESTful Routing:RouteData必须包含一个名为Action的项目?

时间:2011-01-26 20:17:05

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

我们正在使用ASP.NET MVC Futures项目(Microsoft.Web.Mvc)来使MVC 3应用程序能够使用RESTful路由。此应用程序在MVC 1及其相关的System.Web.Mvc.Resources.dll程序集下完美运行,具有相同的功能。

我们正在注册路线:

routes.MapResourceRoute("MyController", "{MyItemId}");

哪个路线应该为我们提供:

/MyController
/MyController/{MyItemId}
/MyController/{MyItemId}/EditForm
/MyController/CreateForm

我们得到四条有效路线中的三条 - 该列表中的第二条路线(/ MyController / {MyItemId})返回错误:

Server Error in '/' Application.
The RouteData must contain an item named 'action' with a non-empty string value. 

当我尝试追加?action =详细信息或其他向URL注入操作参数的方法时,我收到404错误。看起来Futures代码中的WebEnabledApi属性发生了显着变化 - 其他任何人遇到这些问题,并有解决方案吗?

1 个答案:

答案 0 :(得分:1)

默认路由基于“controller / action / id”,因为你只是传递id而不是动作,它会给你404错误。

routes.MapRoute("Default", "{controller}/{action}/{id}",
            new
            {
                controller = "Home",
                action = "Index",
                id = UrlParameter.Optional
            });

我相信你正试图打电话给详情。

如果您在控制器上有操作,则使用默认路径可能有效:

MyController/Details/{MyItemId}