首页 > 解决方案 > 是否有多个 Http Post 的最佳实践 - RPC 样式、自定义 MediaTypeFormatter 或其他

问题描述

我不是要开始一场圣战,而是寻找关于创建包含多个 HTTP 动词的 API 的最佳实践的文档。

我继承了一个 4.7.2 Web API 项目并试图理顺一些事情,并希望在未来的某个时候将其移至 .NET Core。

同时,我有一个将获得新功能的资源。为了简单起见,我们只说它是一个“文档”。

目前有一个 [HttpPost] 用于创建文档元数据。问题是扩展它以提供“克隆”、“拆分”、“合并”,所有这些都是创建类型,但都依赖于现有文档。

我可以走 RPC 风格

这与 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 { }

标签: asp.net-web-apiwebapiasp.net-web-api-routing

解决方案


推荐阅读