ibcadmin 发表于 2019-12-26 09:06:42

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

<plang="ZH-CN" xml:lang="ZH-CN">如今,当评论起 RESTful Web API 的时间,人们总会想到 JSON。但是现实上,JSON 和 RESTful API 没有半毛钱关系,只不外 JSON 恰恰是RESTful API 效果的表述格式。也就是说 RESTful API 还可以使用别的的表述格式,比方 xml 或私有的格式。这也就意味着,我们须要让 RESTful API 知道我们想要返回的格式。而这就是HTTP哀求和相应的核心内容之一: </p>


<plang="ZH-CN" xml:lang="ZH-CN"> </p>


<h1lang="EN-US" xml:lang="EN-US">Content Negotiation 内容协商 </h1>


<plang="ZH-CN" xml:lang="ZH-CN">内容协商是如许一个过程:针对一个相应,当有多种表述格式可用的时间,选取最佳的一个表述。 </p>


<plang="ZH-CN" xml:lang="ZH-CN"> </p>


<plang="ZH-CN" xml:lang="ZH-CN">当我们的RESTful API只面向一个API消耗者的时间,大概只使用 JSON 一种格式是没有什么标题的。但是假如须要面向各种情势的多个API消耗者,那么很有大概少数API消耗者无法很好的剖析JSON,它们大概更风俗于xml大概别的格式。 </p>


<plang="ZH-CN" xml:lang="ZH-CN"> </p>


<plang="ZH-CN" xml:lang="ZH-CN">那么怎样管理这个标题呢? </p>


<plang="EN-US" xml:lang="EN-US">HTTP哀求的 Accept Header 就是用来管理这个标题的,API的消耗者在发送哀求的时间,在Accept Header 内里填写好 Media Type(媒体范例),比方 application/json 大概 application/xml等等。 </p>


<plang="ZH-CN" xml:lang="ZH-CN">假如哀求里填写的是 application/json,那么RESTful API返回相应的表述格式就应该是 json… </p>


<plang="ZH-CN" xml:lang="ZH-CN"> </p>


<plang="ZH-CN" xml:lang="ZH-CN">而假如哀求没有填写 <strong>Accept Header</strong>,那么 RESTful API 只好使用它的默认格式举行相应了。 </p>


<plang="ZH-CN" xml:lang="ZH-CN">假如在 Accept Header 内里填写的格式不被 RESTful API 所支持,那么倒是也可以返回默认的格式,但照旧要只管克制这种环境的出现,实在针对这种环境最好的办法是返回 406(Not Acceptable) 状态码,体现 API消耗者哀求的媒体范例是不可担当的,无法将其作为相应的格式。 </p>


<plang="ZH-CN" xml:lang="ZH-CN"> </p>


<plang="ZH-CN" xml:lang="ZH-CN">综上,Accept Header 指的是输特别式。 </p>


<plang="ZH-CN" xml:lang="ZH-CN">在 ASP.NET Core 内里对应的就是 Output Formatters。 </p>


<plang="ZH-CN" xml:lang="ZH-CN"> </p>


<plang="ZH-CN" xml:lang="ZH-CN">而用于指定输入格式的 Header是 <strong>Content-Type</strong>,在 ASP.NET Core 内里对应的就是 Input formatter。 </p>


<plang="ZH-CN" xml:lang="ZH-CN">比方 POST 哀求的 body 就须要通过指定 Content-Type 来举行标识,这个 Header 可以看作是自形貌性这个束缚的一部门(每个消息必须包含富足的信息来知道怎样对它举行处置惩罚)。 </p>


<plang="ZH-CN" xml:lang="ZH-CN"> </p>
页: [1]
查看完整版本: 使用ASP.NET Core 3.x 构建 RESTful API - 3.4 内容协商