web api的新玩法
前言:
目前大多数的.net core 项目的web api 都是用的json作为数据传输格式,或者说几乎是所有的都是,可是有没有想过换一种数据传输格式怎么处理,比如XML,或者谷歌首推的Protobuf数据传输格式?对于这种请求,我们要怎么处理呢?比如相同的url 只是想用不同数据格式, api/Values.json | api/Values.xml 这又怎么处理?
正文:
首先既然默认得是json格式,我们首先拿json开刀。
新建一个 Core 2.0的web api 项目。进入默认的ValueController 中
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
正常情况下我们默认请求的url是 api/values 然后取到上述数据 默认的json格式。
我们现在变一下 请求api/values.json 怎么样系统会识别吗?我们试一下,不好意思系统并没有鸟我,什么都没有给我。

那怎么样让系统能够识别呢?其实和简单。FormateFilterAttribute 就行了。我们改造一下。
[HttpGet("api/Values.{format}"),FormatFilter]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
我们再次请求 api/values.json

好了取到数据了,如果我们把后缀换成.xml 怎么样?是不是就可以用xml进行数据传输了?
我们试一试。

天真是要付出代价的,原因是什么呢?因为默认的json格式的数据。所以加上FormatFilterAttribute只是进行了一个过滤的作用,并没有起到注册类型的作用。
想解决这个问题需要引入新的nuget包
<PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Xml" Version="2.0.0" />
然后在startup.cs 的configureServices中注册xml 类型。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options=> {
options.FormatterMappings.SetMediaTypeMappingForFormat("xml", "application/xml"); });
}
然后我们访问api/values.xml

终于得到我们想要的数据了。
web api的新玩法的更多相关文章
- WEB安全新玩法 [1] 业务安全动态加固平台
近年来,信息安全体系建设趋于完善,以注入攻击.跨站攻击等为代表的传统 Web 应用层攻击很大程度上得到了缓解.但是,Web 应用的业务功能日益丰富.在线交易活动愈加频繁,新的安全问题也随之呈现:基于 ...
- Chrome 控制台新玩法-向输出到console的文字加样式
Chrome 控制台新玩法-向输出到console的文字加样式 有兴趣的同学可以文章最后的代码复制贴到控制台玩玩. Go for Code 在正常模式下,一般只能向console 控制台输出简单的文字 ...
- 自定义 checkbox 新玩法 ?
自定义 checkbox 新玩法 ? 第一步:selector 编写 drawable/selector_checkbox_voice.xml <?xml version="1.0&q ...
- 【转帖】Moodle平台的5个新玩法
[玩坏Moodle平台]Moodle平台的5个新玩法 1.RSS订阅 Moodle平台可以导入外部博客(或其他提供RSS的服务),并显示在Moodle内置的博客系统中.无论是自己的个人网站还是他人的博 ...
- Odoo 库存管理-库存移动(Stock Move)新玩法
库存移动(Stock Move)新玩法 Odoo的库存移动不仅仅是存货在两个“存货地点”之间的移动的基本概念了,他们可以被“串联”在一起,可以用来生成或改变其对应的拣货单 (Picking).链式库存 ...
- Visual Studio 2013 Preview - ASP.NET, MVC 5, Web API 2新功能搶先看
Visual Studio 2013 Preview - ASP.NET, MVC 5, Web API 2新功能搶先看 來自TechEd North America 2013的第一手消息 以下資訊均 ...
- MySQL高可用新玩法之MGR+Consul
前面的文章有提到过利用consul+mha实现mysql的高可用,以及利用consul+sentinel实现redis的高可用,具体的请查看:http://www.cnblogs.com/gomysq ...
- 摹客iDoc「标注」新玩法!这些细节让你爱不释手(201903-2版本更新)
哈喽小伙伴们,我们又见面啦!没错,小摹就是来告诉大家:摹客iDoc又双叒叕升级了!这次又上线了许多新玩法,在此之前,小摹先带大家温习一下iDoc以往的知识点: 攻城狮查看标注的利器 —— 标注信息智能 ...
- Github 新玩法 -- Profile ReadMe
Github 新玩法 -- Profile ReadMe Intro 今天刷 Github 的时候偶然发现一个新的玩法,Github Profile ReadMe,可以在个人的 Profile 页面展 ...
随机推荐
- vue触底,触顶事件
data(){ return{ songList: [], //歌单列表 totalPage: "", total: "", pageSize: 10, thi ...
- 051——VUE中自定义指令:directive
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- UML图 之 活动图 (汇总版)
============================================================ 摘自: https://blog.csdn.net/tigaoban/arti ...
- [CSAcademy]Colored Forests
csacademy description 有\(M\)种颜色编号为\(1-M\).现给树上的每个点染上这\(M\)种颜色中的一种,定义一棵树是\(\mbox{colorful}\)的当且仅当这棵树上 ...
- 【转】Python 中的 if __name__ == '__main__' 该如何理解
转自:http://blog.konghy.cn/2017/04/24/python-entry-program/ 程序入口 对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面 ...
- mongodb下cpu高的查询方式(慢查询)
1.查看mongodb进程 ps-ef | grep mongo 获取进程id为3267 2.查看进程的线程 top -p 3267 按shift+h 查看cpu高的线程,发现有线程点用cpu高且cp ...
- streamsets Processors 说明
Processors 表示对于一种数据操作处理,在pipeline中可以应用多个Processors, 同时根据不同的执行模式,可以分为独立模式的,集群模式.边缘模式(agent),以及 帮助测试的测 ...
- LINQ to SQL 建立实体类 (转)
http://www.cnblogs.com/DebugLZQ/archive/2012/11/14/2770449.html 使用LINQ to SQL时,需要首先建立用于映射数据库对象的模型,也就 ...
- linux关于ftp查看不到文件列表的问题
今天配置linux服务器的ftp后,登录都正常,使用ftp工具登录后,所有目录都可以通过手工写路径访问,但是文件夹和文件列表看不到数据. 后来分析,总结原因得出结果是跟selinux有关,于是通过关闭 ...
- linux Posix 信号量 二
一.Posix信号量 1.Posix信号量分为两种: 1. 有名信号量:使用Posix IPC名字标识(有名信号量总是既可用于线程间的同步,又可以用于进程间的同步) 2. 内存信号量:存放在共 ...