题外话

一同事离职了,我去上厕所的路上正巧碰到他办完离职手续出来,抱着他的全部家当,最值钱的可能就是那个两块钱的蓝色杯子和手中的雨伞了。在一块儿走向厕所的长长楼道里,我对他说:丫的,你是不是找到别的发财之道了?如果有好工作了挣钱了可别忘了我阿?是不是不打算在这“屌丝之城”待了?他一直似笑非笑的不语。他撒完可能是在这幢楼上的最后一泡尿说:我走了!做PHP去。然后我“哦”了一声。外边还在下着雨...

我眼中的Web API

据说当年ASP.NET MVC团队和WCF Web API团队的负责人是同一个人,然后他就想怎么把两个团队合并在一起,使大家都可以更轻松的工作。然后他们就开始了合并工作,也就是在Visual Studio 2012发布的时候,MVC 4.0 和ASP.NET Web API一同走进了大家的视线中,带来的Razor视图极大的提高了我们的生活质量。Web API的出现,使之成为创建移动客户端的HTTP服务的新框架,同时也是构建 RESTful 服务的理想平台!我的第一次就给了离职那位同事,别想歪,是用Web API方式为移动端提供数据。

我今天不想去说Web API的什么先进的HTTP模型、支持路由和重新路由、基于动作响应(约定大于配置)、Action过滤、异常处理、依赖反转、自托管等等一些内容,因为我感觉我可能大概也不会说的太清楚,可以点这里去看看,也可以看看这里。我要说的是它的最方便的一个内容—— 内容协商。简单点说,就是可以自定义数据返回格式!json、太TMD的好使了。

硬生生的干货

在不影响性能开销的前提下,使用自定义的JsonContentNegotiator替换系统默认的DefaultContentNegotiator是最好的方式,代码如下:

public class JsonContentNegotiator : IContentNegotiator
{
private readonly JsonMediaTypeFormatter _jsonFormatter; public JsonContentNegotiator(JsonMediaTypeFormatter formatter)
{
_jsonFormatter = formatter;
} public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
{
var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json"));
return result;
}
}

建好这个类后,在WebApiConfig.cs中注册下就好了,代码如下。插一句:API的全局异常、日志也可以在这注册哦!

public static class WebApiConfig
{
// 这是第一句
static JsonMediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter(); public static void Register(HttpConfiguration config)
{
//这是第二句
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}

如果你想更深入的了解Content Negotiation的知识,点这里这里

其实你完全也可以傻傻的去序列化成json返回,我只是想说这是在ASP.NET Web API中最合适的一种方式。

窗外的天空

太阳大大的照的我挣不开眼了,楼下的喇叭里洗脑式的喊着“康师傅老坛酸菜牛肉面”,我去晒太阳了。

说说Web API数据格式化——Json的更多相关文章

  1. 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化

    谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...

  2. Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET W ...

  3. ASP.NET Web API中的JSON和XML序列化

    ASP.NET Web API中的JSON和XML序列化 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok ...

  4. 《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf

    <ASP.NET Core跨平台开发从入门到实战>样章节 Web API自定义格式化protobuf. 样章 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于 ...

  5. Web Api 中返回JSON的正确做法

    在使用Web Api的时候,有时候只想返回JSON:实现这一功能有多种方法,本文提供两种方式,一种传统的,一种作者认为是正确的方法. JSON in Web API – the formatter b ...

  6. Web Api 中返回JSON的正确做法(转)

    出处:http://www.cnblogs.com/acles/archive/2013/06/21/3147667.html 在使用Web Api的时候,有时候只想返回JSON:实现这一功能有多种方 ...

  7. 解决GJson 获取web api数据出现Not a JsonObject问题

    服务器端web api服务采用asp.net web api编写,对请求的数据序列化成Json格式的字符串进行传递. 客户端采用Java进行接收处理,处理采用GJson进行解析,出现Not a Jso ...

  8. Web API对application/json内容类型的CORS支持

    假设有一简单架构分为前后两部分,其一是Angular构成的前端页面站点,另一个则是通过ASP.NET Web API搭建的后端服务站点.两个站点因为分别布署,所有会有CORS(Cross-Origin ...

  9. ASP.NET Web API 2 返回 Json格式

    最近在学习ASP.NET的Web API,刚刚开始以为会有些复杂,结果却非常简单. 学习的地址:http://www.asp.net/web-api/overview/getting-started- ...

随机推荐

  1. 在Windows下使用Nodist进行Node版本控制

    完全卸载Node.js 首先卸载Node.js应用程序 确认在C:\Program Files中没有Nodejs目录 确认在C:\Program Files (x86)没有Nodejs目录 删除C:\ ...

  2. 画之国 Le tableau (2011)

    在佛斯特的肚子里,靠近幽门的地方,两只阿米巴原虫快乐地生活着.他们的日子过得很舒服,从来没饿过肚子,而且根本用不着干活:因为他们就是所谓的寄生虫.这两个好朋友相处得很愉快,但时不时也会争论不休,因为他 ...

  3. fine-uploader 5.11.8 (最新版) 使用感受

    以前测试和使用过 3.X 因为够用,所以一直没升级,今天闲来无聊测试了一下最新版.和3.X比性能上好了很多,但不支持了移动设备的多文件上传. 关于3.X版 可以看这里:http://www.cnblo ...

  4. Windows KB2984972安装后堵住了一个windows 7 桌面可以多个用户远程访问桌面的漏洞。

    之前网络上有方法可以实现2个用户同时使用一个windows 7,一个在终端,一个通过远程桌面. 安装了这个kb后,就无法同时登陆了,同一时间只有一个用户可以登陆windows 7

  5. [Aaronyang] 写给自己的WPF4.5 笔记20 [3d课 1/4]

    假设你是高中毕业的,ok,数学知识几何知识中,我们学过  x,y,z   3个轴然后就可以画出形状了. 1. 新建空白窗体,grid换成canvas,然后新增一个Viewport3D元素 3d中显示的 ...

  6. Javascript 固定表格表头

    遇到一个简单的需求: 客户有一个表格可能有很多内容,当内容很多的时候,表格就会出现滚动条 客户希望当表格内容很多时,只滚动表格而不滚动浏览器窗口 在网上找到很多相关的插件,要不就是太复杂,要不就是满足 ...

  7. dubbo 管理控制台 的安装 dubbo-admin

    按照官方文档来,只是官方文档中提供的war包无法下载,我的环境至少是这样,不知道其他网络环境是否OK. war包下载地址:链接: http://pan.baidu.com/s/1i32fs7j 密码: ...

  8. jQuery File Upload跨域上传

    最近在做一个一手粮互联网项目,方案为前后端分离,自己负责前端框架,采用了Requirejs+avalonjs+jquery三个框架完成. 前后端通过跨域实现接口调用,中间也发现了不少问题,尤其是在富文 ...

  9. C#集合--数组

    Array类是所有一维和多维数组的隐式基类,同时也是实现标准集合接口的最基本的类型.Array类实现了类型统一,因此它为所有数组提供了一组通用的方法,不论这些数组元素的类型,这些通用的方法均适用. 正 ...

  10. [原]OpenGL基础教程(五)缓冲区数据更新方式

    1.glBufferSubData 适用于相同数据类型 void SetPositionY(float y){    vector<Vector3<float>>::itera ...