CRUD和非CRUD操作的正确路由

时间:2012-10-02 20:32:03

标签: asp.net-mvc asp.net-mvc-4 asp.net-web-api

假设我想在控制器中进行标准的CRUD操作:

api / values - IEnumerable Get() api / values / 1 - 获取(int id) api / values - 发布([FromBody]字符串值) api / values / 5 - Put(int id,[FromBody]字符串值) api / values / 5 - 删除(int id)

但我希望有其他操作,例如:

API /值/ someoperation1 API /值/ searchbysomething ......等等。

在此下方有第二条路线无济于事

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}"
        );

1 个答案:

答案 0 :(得分:0)

默认情况下,无法在单个控制器中混合使用REST样式路由和RPC样式路由。

在ASP.NET Web Stack的Codeplex上有一个未解决的问题 - http://aspnetwebstack.codeplex.com/workitem/184

唯一合理的解决方案是为每个资源配备2个控制器 - 一个用于CRUD,另一个用于非CRUD(RPC)类型的操作。