首页 > 编程语言 >ASP.NET Core实现内容协商 (json+xml)(如何根据请求的媒体类型调整数据的输出)

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

时间:2022-10-09 05:55:05浏览次数:67  
标签:xml Core ASP HTTP 请求 协商 json 格式

内容协商概念

内容协商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中测试结果如下:

标签:xml,Core,ASP,HTTP,请求,协商,json,格式
From: https://www.cnblogs.com/huangkenicole/p/16770854.html

相关文章

  • CSharp: Strategy Pattern in donet core 3
     ///<summary>///车辆行为模型///AbstractBehavior///策略模式StrategyPattern///geovindu,GeovinDuedit//////</summa......
  • CSharp: Observer Pattern in donet core 3
     ///<summary>///观察者模式ObserverPattern亦称:事件订阅者、监听者、Event-Subscriber、Listener、Observe///geovindu,GeovinDueidt///......
  • 使用EF Core更新与修改生产数据库
    使用EFCore的CodeFirst,在设计阶段,直接使用Database.EnsureCreated()和EnsureDeleted()可以快速删除、更新最新的数据结构。由于没有什么数据,删除的风险非常低。但是对于......
  • .NET Core和.NET Framework中DateTime.Now的区别
    今天和医院的微信公众号接口对接,需要传当前时间,我随手写了一个DateTime.Now传了过去,过了一会那边说时间格式不对,原来.NETCore中DateTime.Now的格式是2022/10/08下午04......
  • 尚硅谷-JavaWeb Day4 XML
    1.XML可拓展的标记性语言2.XML的作用:用来保存数据,而且这些数据具有自我描述性;可以作为项目或者模块的配置文件;可以作为网络传输数据的格式(现在使用json);3.XML......
  • CentOS7安装.netCore
    CentOS7安装.NET之前,请运行以下命令,将Microsoft包签名密钥添加到受信任密钥列表,并添加Microsoft包存储库。打开终端并运行以下命令:sudorpm-Uvhhttps://packa......
  • lxml.etree 入门
    作者:StefanBehnel这个教学覆盖lxml处理的主要几个方面,其中的一些功能也许能使你的码农生涯好过一点。完整的API请看​​http://lxml.de/api/index.html​​。通常......
  • Asp.Net Core Request生命周期
    官网文档有这么个图:返回的时候为什么还又反向走了各个MiddleWare的逻辑呢?所以按它这个图里的代码组织方式试了一下。图里的四个exeorder还真是以'next()'为为界,把一......
  • NETCORE - ElasticSearch 搜索服务
                                            引用:https://www.cnblogs.com/qiect/arti......
  • DotnetCore3.1出现Method ‘Create‘ in type ... does not have an implementation
    错误提示如下:出现这个问题的原因是安装的Microsoft.EntityFrameworkCore.Design包版本是5.0.17,而它所依赖的其他包版本是3.1.25,解决方案就是将Microsoft.EntityFramework......