• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

使用ASP.NET Core 3.x 构建 RESTful API - 3.4 内容协商

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

现在,当谈论起 RESTful Web API 的时候,人们总会想到 JSON。但是实际上,JSON  RESTful API 没有半毛钱关系,只不过 JSON 恰好是RESTful API 结果的表述格式。也就是说 RESTful API 还可以使用其它的表述格式,例如 xml 或私有的格式。这也就意味着,我们需要让 RESTful API 知道我们想要返回的格式。而这就是HTTP请求和响应的核心内容之一: 

 

内容协商是这样一个过程:针对一个响应,当有多种表述格式可用的时候,选取最佳的一个表述。 

 

当我们的RESTful API只面向一个API消费者的时候,也许只使用 JSON 一种格式是没有什么问题的。但是如果需要面向各种形式的多个API消费者,那么很有可能少数API消费者无法很好的解析JSON,它们可能更习惯于xml或者其它格式。 

 

那么如何解决这个问题呢? 

HTTP请求的 Accept Header 就是用来解决这个问题的,API的消费者在发送请求的时候,在Accept Header 里面填写好 Media Type(媒体类型),例如 application/json 或者 application/xml等等。 

如果请求里填写的是 application/json,那么RESTful API返回响应的表述格式就应该是 json 

 

而如果请求没有填写 Accept Header,那么 RESTful API 只好使用它的默认格式进行响应了。 

如果在 Accept Header 里面填写的格式不被 RESTful API 所支持,那么倒是也可以返回默认的格式,但还是要尽量避免这种情况的出现,其实针对这种情况最好的办法是返回 406Not Acceptable 状态码,表示 API消费者请求的媒体类型是不可接受的,无法将其作为响应的格式。 

 

综上,Accept Header 指的是输出格式。 

 ASP.NET Core 里面对应的就是 Output Formatters 

 

而用于指定输入格式的 Header Content-Type,在 ASP.NET Core 里面对应的就是 Input formatter 

例如 POST 请求的 body 就需要通过指定 Content-Type 来进行标识,这个 Header 可以看作是自描述性这个约束的一部分(每个消息必须包含足够的信息来知道如何对它进行处理)。 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NETWebAPI2返回Json格式发布时间:2022-07-10
下一篇:
Asp.Net项目与TCP服务端交互发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap