浏览器标题切换
浏览器标题切换end

ASP.NET Core实现http请求头部的内容协商 (json+xml)(如何根据请求的媒体类型调整数据的输出)

内容协商概念

内容协商Content Negotiation:允许客户端和服务器通过协商来决定 相互之间数据的 传输格式、语言等。

HTTP头部

http头部的媒体类型Media Types定义 acceptContent-type

  • HTTP请求头中的 accept:客户端希望服务器返回的媒体格式

  • HTTP返回头中的 content-type:对应请求时的accept,表示服务器返回数据的类型

后端/服务器端处理json/xml/其他的数据格式步骤

目前主流数据传输格式:json和xml

目的:

  1. HTTP默认是传递 json 格式的数据,一旦在header请求中指定数据类型为 application/xml,我们需要返回对应的数据。

  2. 但是遇到无法识别的数据格式,需要后端返回错误代码 406 ,表示 unacceptable

我们只需要在 Startup.csConfigureServices 方法中添加以下代码即可:

// services.AddControllers(); // 帮助我们在创建API的时候向IOC容器中添加一个控制器的框架服务
// 配置控制器 -> 处理mediatype
// false: 所有API都会忽略请求的头部,都统一回复默认的数据结构json
services.AddControllers(setupAction =>
{
  setupAction.ReturnHttpNotAcceptable = true; // 处理其他格式

 // 给api添加xml的处理(支持)AddXmlDataContractSerializerFormatters  配置所有与xml相关的input+output相关代码
// setupAction.OutputFormatters.Add(
//     new XmlDataContractSerializerOutputFormatter());

}).AddXmlDataContractSerializerFormatters(); // 406 Not Acceptable // 处理xml格式

操作成功后再Postman中测试结果如下:

posted @ 2022-10-09 05:50  抓水母的派大星  阅读(362)  评论(0编辑  收藏  举报