我是 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# 代码,编译器将毫无问题地知道选择哪个,因为方法具有不同的签名。但Web API不够智能。
我查看了自定义约束,但这似乎不合适。我也无法使用不同的 {actions},因为这违反了我的 API 的 RESTful 约束(没有 RPC,只有资源)。我也无法将第二篇文章放在不同的控制器上。
我让它工作的唯一方法是将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 对象中。
还有其他建议吗?
顺便说一句:这个网站是最好的!我在这里找到了很多答案!