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 页面展 ...
随机推荐
- get方法传送中文乱码解决方法
找到tomcat配置文件 server.xml 找到<Connector port="8080" ....... /> (......为配置文件中原来内容) 在最 ...
- vuex: 简单(弹窗)实现
在使用基于 vue.js 2.0 的UI框架 ElementUI 开发网站的时候 , 就遇到了这种问题 : 一个页面有很多表单 , 我试图将表单写成一个单文件组件 , 但是表单 ( 子组件 ) 里的数 ...
- Java例子
1. 本章学习总结 今天主要学习了三个知识点 封装 继承 多态 2. 书面作业 Q1. java HelloWorld命令中,HelloWorld这个参数是什么含义? 今天学了一个重要的命令javac ...
- 【转载】一张表看懂LTE和5G NR的区别
转自:微信公众号:网优雇佣军 KPI 物理层
- 如何检测MySQL中建立的索引是否生效
使用方法,在select语句前加上explain就可以了: EXPLAIN SELECT surname,first_name form a,b WHERE a.id=b.id EXPLAIN列的解释 ...
- 随笔——python截取http请求报文响应头
随笔——python截取http请求报文响应头 标签: pythonhttp响应头 2014-05-29 09:32 2114人阅读 评论(0) 收藏 举报 分类: 随笔(7) 版权声明:本文为博 ...
- 让APK 成功在 Windows 运行并可以设置本地文件
让APK 成功在 Windows 运行并可以设置本地文件 安装 ARC Welder. 启动 ARC Welder 后选反apk 文件,下载 zip. 将 zip 解压修改 manifest.json ...
- stacks and queues--codility
lesson 7: stacks and queues 1. Nesting 2. StoneWall 3. Brackets 4. Finsh lesson 7: stacks and queues ...
- 关于Eclipse
Navigator窗口 之前看到同事使用Eclipse的Navigator窗口,十分不解这个窗口有啥用:今天通过了解才知道Package Explorer是从工程的角度来显示文件,比如settings ...
- CF gym101933 K King's Colors——二项式反演
题目:http://codeforces.com/gym/101933/problem/K 每个点只要和父亲不同色就行.所以 “至多 i 种颜色” 的方案数就是 i * ( i-1 )n-1 . #i ...