是否可以仅使用一条路线映射以下操作?
14 21 39 48 109 3882
在我的public class SimpleDataController : ApiController
{
// GET /SimpleData
public List<MyObject> Get(){ return new List<MyObject>();};
// GET /SimpleData/4
public MyObject Get(int objectId){ return new MyObject{Id = objectId);};
// GET /SimpleData/4/ObjectsForId
public List<MySubObject> ObjectsForId(int objectId){ return new List<MySubObject>();};
// GET /SimpleData/4/ObjectsForId/3
public MySubObject ObjectsForId(int objectId, int subObjectId){ return new MySubObject();};
}
我已将以下代码添加到路线中:
WebApiConfig.cs
这适用于:
config.Routes.MapHttpRoute(
name: "OneLevelNested",
routeTemplate: "api/{controller}/{id}/{action}/{subId}",
defaults: new { subId = RouteParameter.Optional }
);
和GET /SimpleData/4/ObjectsForId
对于GET /SimpleData/4/ObjectsForId/3
,我收到以下错误:
请求的资源不支持http方法'GET'。
对于GET /SimpleData
我得到:
找到了与请求匹配的多个操作:Get类型Controllers.SimpleDataController ObjectsForId类型Controllers.SimpleDataController
我已尝试将GET /SimpleData/4
的默认值设置为“获取”,这适用于上述示例,但action
,POST
和{{1}将失败因为它还会检查名为“Get”的PUT
。
有什么技巧我不知道吗?
我不想为每个控制器创建新的映射。
答案 0 :(得分:0)
您需要使参数id
也可选。否则是始终需要的参数,路由GET / SimpleData将不起作用。
config.Routes.MapHttpRoute(
name: "OneLevelNested",
routeTemplate: "api/{controller}/{id}/{action}/{subId}",
defaults: new { subId = RouteParameter.Optional, id= RouteParameter.Optional }
);