题外话

一同事离职了,我去上厕所的路上正巧碰到他办完离职手续出来,抱着他的全部家当,最值钱的可能就是那个两块钱的蓝色杯子和手中的雨伞了。在一块儿走向厕所的长长楼道里,我对他说:丫的,你是不是找到别的发财之道了?如果有好工作了挣钱了可别忘了我阿?是不是不打算在这“屌丝之城”待了?他一直似笑非笑的不语。他撒完可能是在这幢楼上的最后一泡尿说:我走了!做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. 集群: 如何在spring 任务中 获得集群中的一个web 容器的端口号?

    系统是两台机器, 跑四个 web 容器, 每台机器两个容器 . nginx+memcached+quartz集群,web容器为 tomcat . web 应用中 用到spring 跑多个任务,任务只能 ...

  2. TCP_NODELAY 和 TCP_CORK主要区别

    一句话总结: tcp_nodelay:禁止nagle算法,有需要发送的就立即发送,比较常见 tcp_cork:它是一种加强的nagle算法,过程和nagle算法类似,都是累计数据然后发送.但它没有 n ...

  3. spring整合activemq发送MQ消息[queue模式]实例

    queue类型消息 pom依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</ ...

  4. 原创:goldengate从11.2升级到12.1.2

    goldengate从11.2升级到12.1.2 1.停止抽取进程 GGSCI (001.oracle.drs.dc.com) 286> stop EXTSJ01 2. 停止投递和复制进程 等待 ...

  5. Windows 64位 安装Oracle instantclient 官方绿色版和PL/SQL Developer 总结

    原文: http://blog.csdn.net/kimsoft/article/details/8751267 操作系统:Windows 7 64位旗舰 要求,安装PL/SQL Developer用 ...

  6. [AX]AX2012 Number sequence framework :(三)再谈Number sequence

    AX2012的number sequence framework中引入了两个Scope和segment两个概念,它们的具体作用从下面序列的例子说起. 法国/中国的法律要求财务凭证的Journal nu ...

  7. HTML5+javascript实现图片加载进度动画效果

    在网上找资料的时候,看到网上有图片加载进度的效果,手痒就自己也写了一个. 图片加载完后,隐藏loading效果. 想看加载效果,请ctrel+F5强制刷新或者清理缓存. 效果预览:   0%   // ...

  8. Spark源码系列(九)Spark SQL初体验之解析过程详解

    好久没更新博客了,之前学了一些R语言和机器学习的内容,做了一些笔记,之后也会放到博客上面来给大家共享.一个月前就打算更新Spark Sql的内容了,因为一些别的事情耽误了,今天就简单写点,Spark1 ...

  9. 使用aspose.cell导出excel需要注意什么?

    1.如果导出的数据源是汇总出来的,最好方法是将数据源放到缓存里面,当基本数据源变化的时候,在改变数据2.使用模板导出EXCEL,这样很多样式可以在模板文件里面直接设置,例如:默认打开页签,让列头固定3 ...

  10. ux.plup.File plupload 集成 ux.plup.FileLis 批量上传预览

    //plupload 集成 Ext.define('ux.plup.File', { extend: 'Ext.form.field.Text', xtype: 'plupFile', alias: ...