【发布时间】:2015-04-04 02:04:11
【问题描述】:
我是 Web API 的新手... 这是我的基本路线:
config.Routes.MapHttpRoute(
name: "Workitems",
routeTemplate: "api/{controller}/{workitemID}",
defaults: new { controller = "workitems", workitemID = RouteParameter.Optional }
);
这是我想要的:
public HttpResponseMessage Post( [FromBody] FolderModel theModel )
public HttpResponseMessage Post( [FromBody] DocumentModel theModel )
但是,Web API 没有找到我的第二个 Post 方法。我在这里和谷歌做了很多搜索,但没有找到任何适合我的东西(嗯)。我知道我可以将第二个未使用的参数添加到第二个方法中——但这太过分了。如果这是普通的 C# 代码,编译器将毫无问题地知道选择哪个 b/c 方法具有不同的签名。但是 Web API 不够智能。
我查看了自定义约束,但这似乎不合适。我也不能使用不同的 {actions},因为这违反了我的 API 的 RESTful 约束(没有 RPC,只有资源)。我也不能将 2nd Post 放在不同的控制器上。
我让它工作的唯一方法是将 FolderModel 和 DocumentModel 包装在一个父对象中,如下所示:
public class WorkitemCreateModel
{
public DocumentModel Document { get; set; }
public FolderModel Folder { get; set; }
}
public HttpResponseMessage Post( [FromBody] WorkitemCreateModel theModel )
然后有一个采用 WorkitemCreateModel 的 Post 方法。但是,使用我的 API 的开发人员有责任他们必须传入 WorkitemCreateModel 但他们只能传入 DocumentModel 对象或 FolderModel 对象。这也很烦人,因为我的 GET API 可以返回 DocumentModel 对象或 FolderModel 对象。因此,最好将您从 GET 获得的对象传递给 POST。但这不起作用,他们必须先将其包装在 WorkitemCreateModel 对象中。
还有其他建议吗?
顺便说一句:这个网站是最好的!我在这里找到了很多答案!
【问题讨论】:
标签: c# rest asp.net-web-api