2012-10-02 35 views
0

让我们假设我想有一个控制器标准CRUD操作:两个CRUD和非CRUD操作正确路线

API /值 - IEnumerable的获取() API /价值/ 1 - 获取(INT ID) API /值 - 发布([FromBody]字符串值) API /值/ 5 - 将(INT ID,[FromBody]字符串值) API /值/ 5 - 删除(INT ID)

但我想有额外的操作,如:

api/values/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}" 
     ); 

回答

0

默认情况下,不可能在一个混合REST风格的路由和RPC样式路由单个控制器。

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

对您而言,唯一合理的解决方案是为每个资源设置2个控制器 - 单独一个用于CRUD,另一个用于非CRUD(RPC)类型的操作。