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

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

Content Negotiation 内容协商 

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

 

当我们的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 可以看作是自描述性这个约束的一部分(每个消息必须包含足够的信息来知道如何对它进行处理)。 

官方详细文档请点击原文链接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sklearn随机森林概述

随机森林是一个拓展变体,在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体来说,传统决策树在选择划分属性时是在当前结点的属性集合中选择一个最优属性;而在随机森林的每个结点&…

《Dotnet9》系列-开源C# Winform控件库1《HZHControls》强力推荐

大家好,我是Dotnet9小编,一个从事dotnet开发8年的程序员。我最近在写dotnet分享文章,希望能让更多人看到dotnet的发展,了解更多dotnet技术,帮助dotnet程序员应用dotnet技术更好的运用于工作和学习中去。文章阅读导航一…

sklearn集成学习概述

常见的集成学习有Voting、Bagging、Boost和Stacking。 Voting代码 from sklearn.model_selection import train_test_split from sklearn.datasets import make_moons from sklearn.ensemble import RandomForestClassifier from sklearn.ensemble import VotingClassifier f…

不要叫我,我会叫你

之前看过前辈Artech关于控制反转的一篇文章,文章通俗易懂且言语精炼,写技术文章既是积累也是分享,既然是分享那么必须让读者能够明白到底讲解的什么,所以在这里我也挑战下自己,看看能不能将概念通过简洁代码和语言的形…

用.NET模拟天体运动

用.NET模拟天体运动这将是一篇罕见而偏极客的文章。我上大学时就见过一些模拟太阳系等天体运动的软件和网站,觉得非常酷炫,比如这个(http://www.astronoo.com/en/articles/positions-of-the-planets.html): 其酷炫之处…

01 手把手带你构建大规模分布式服务--高并发、高可用架构系列,高质量原创好文!...

作者:丁浪,目前在创业公司担任高级技术架构师。曾就职于阿里巴巴大文娱和蚂蚁金服。具有丰富的稳定性保障,全链路性能优化的经验。架构师社区特邀嘉宾!阅读本(系列)文章,你将会收获:…

如何正确的探索 Microsoft Ignite The Tour

Microsoft Ignite The Tour 是一年一度微软为全球开发者、IT专家、安全专家以及数据专家提供的为期两天,包含众多核心产品的实践性技术培训。2019.12.10-2019.12.11 已经在北京国家会议中心胜利闭幕,我作为一名Speaker 参与了两门课程的分享,…

Leetcode贪心 种花问题

You have a long flowerbed in which some of the plots are planted, and some are not. However, flowers cannot be planted in adjacent plots. Given an integer array flowerbed containing 0’s and 1’s, where 0 means empty and 1 means not empty, and an integer n…

回顾这一年,我沉默良久

今天是一个特殊的日子,因为还有一周就2024了。 回忆 我骑着我心爱的小电驴慢悠悠的走在下班的路上,看着万家灯火,匆匆而过的行人和那开着三轮车的摊贩们与城管斗智斗勇。 我陷入了回忆? 回忆着今年的进程,先是裁员…

Cookie、session、token对比

Cookiecookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求…

Leetcode贪心 验证回文字符串

Given a string s, return true if the s can be palindrome after deleting at most one character from it. 思路 用头尾指针遍历原字符串,但碰到所指不相同时,需要退出循环记录此书指针的位置。分别去除两个指针上的内容,查看删除一个字符…

使用ASP.NET Core 3.x 构建 RESTful API - 4.1 面向外部的Model

Entity Framework Core 使用的 Entity Model 是用来表示数据库里面的记录的。 而面向外部的 model 则表示了要传输的东西。这类 model 有时候叫做 Dto,有时候叫做 ViewModel。 举一个例子,人员的Entity Model如下: 最后一个字段表示人员的出生…

特意向大家推荐.NET技术圈一些优秀开发者的公众号

在互联网技术飞速发展的今天,各种技术席卷而来,总是让人感觉压力山大。作为.NET开发者,我们该如何刷新自己,实现价值的提升呢?2019年.NET中国开发者峰会之后,我们汇总了.NET技术圈一些优秀开发者的公众号&a…

ASP.NET Core on K8S深入学习(11)K8S网络知多少

Photo :Kubernetes文 | Edison Zhou本文已加入《.NET Core on K8S 学习与实践系列文章索引目录》,点击查看阅读更多容器化相关文章,希望对你有所帮助!Kubernetes网络模型我们都知道Kubernetes作为容器编排引擎,它有一个…

Leetcode动态规划 不同路径

A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below). The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked ‘Finish’ in the…

Amazon、Linux基金会开发边缘网络交换器操作系统

Amazon、Linux基金会和5家网络业者上周宣布边缘网络交换器操作系统项目DENT,可能冲击开发专属操作系统的网络晶片及设备业者。DENT希望集结网络设备制造商,系统整合商及晶片厂商,为分散式厂区、远端办公室、分公司及零售业开发解构式网络交换…

fit、transform与fit_transform

fit(x) 是对x进行训练 transform(y) 是将模型直接应用于y fit_transform(x) 是对x进行训练后再将模型应用于x x_test加fit,pca x_test不加fit -4 1 0.8855240762093011 0.6501925545571245 0.7678583153832128 -4 3 0.8855236186606635 0.6508344030808729 0.76817…

多库操作:多个数据库的动态切换(一)

▼更多精彩推荐,上午11点到达▼在平时的开发中,受到传统模式的影响,我们都是习惯了单一的数据库表操作,把数据都建到一个库里边,然后进行增删改查,这个是很经典的开发模式。但是随着项目开发,总…

SMOTE/SMOTEEN 处理不平衡数据集

imblearn包 from imblearn.over_sampling import SMOTE from imblearn.combine import SMOTEENN代码 smo SMOTE(random_state42) x_train, y_train smo.fit_sample(x_train, y_train)smo SMOTEENN(random_state42) x_train, y_train smo.fit_sample(x_train, y_train)

超燃| 2019 中国.NET 开发者峰会视频发布

首届 .NET Conf China 2019 年,注定会是 .NET Core 社区发展的关键一年,诸多重大事件在这一年发生!正如大家所期待的那样,刷新中国 .NET 社区的年度盛会——2019 中国 .NET 开发者峰会(.NET Conf China 2019&#xff0…