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

rsw*_*ord 6 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}");
Run Code Online (Sandbox Code Playgroud)

哪个应该给我们的路线,如:

/MyController
/MyController/{MyItemId}
/MyController/{MyItemId}/EditForm
/MyController/CreateForm
Run Code Online (Sandbox Code Playgroud)

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

Server Error in '/' Application.
The RouteData must contain an item named 'action' with a non-empty string value. 
Run Code Online (Sandbox Code Playgroud)

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

小智 2

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

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

我相信您正在尝试调用详细信息操作。

如果您确实在控制器上执行了操作,则使用默认路由可能会起作用:

MyController/Details/{MyItemId}
Run Code Online (Sandbox Code Playgroud)