问题描述
我不是想发动一场圣战,而是想找一份关于最好的文件 创建包含多个 HTTP 动词的 API 的实践。
我继承了一个 4.7.2 Web API 项目并试图理顺一些事情并 希望将来某个时候可以将其迁移到 .NET Core。
与此同时,我有一个将获得新功能的资源。 为简单起见,我们只说它是一个“文档”。
目前有一个 [HttpPost] 用于创建文档元数据。 要求是扩展它以提供“克隆”、“拆分”、“合并”所有这些 创建类型,但都依赖于现有文档。
我可以走 RPC 风格
- api/document/{action}/{id}
- api/document/{id}/{action}
这与 HTTP REST 实现背道而驰。
第二个实现稍微好一点,但那个“动作”并不是真正的“资源”。
我的另一个选择是拥有一个看起来像底部代码的 HttpPost 并传递自定义内容类型。如果我走这条路,我必须实现一个 MediaTypeFormatter 或者我得到一个异常生成。我目前已经实现并工作,只是 当/如果我开始添加/更改以使用此方法时,这将是维护噩梦。
正如我所说,我使用的是 4.7.2,所以我无法使用 ConsumesAttribute。
我的问题是......是否有最佳实践????
想法?
[HttpPost]
public async Task<IHttpActionResult> Post([FromBody] string Metadata)
{
var ct = Request.Headers["Content-Type"]
switch (ct)
{
// Call operation that will handle that Content Type which
// will deserialize document into a specific object type
}
}
Action Content Type
Create application/json
Clone application/vnd.mycompany.create-from-existing.v1+json
Split application/vnd.mycompany.split-from-existing.v1+json
Merge application/vnd.mycompany.merge-existing.v1+json
public class MyContentTypetoStringFormatter : MediaTypeFormatter { }
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)