题外话

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

    试了不少方法,最后还是这个最有效. [转自:http://thatsimplecode.com/install-mongodb-driver-for-php-on-xampp-for-mac-osx] ...

  2. C# 中 KeyPress 、KeyDown 和KeyPress的详细区别[转]

    研究了一下KeyDown,KeyPress 和KeyUp ,发现之间还是有点学问的. 让我们带着如下问题来说明,如果你看到这些问题你都知道,那么这篇文章你就当复习吧:) 1.这三个事件的顺序是怎么样的 ...

  3. 私有云android客户端2.1.2最新版本(ownCloud简体中文优化版)

    通过安装Ubuntu16.04+LAMP+ownCloud9.1+SSL建立私有云,下载ownCloud android客户端最新源码,针对国际语言简体中文化,修改部分代码,并进行补充.优化,编译生成 ...

  4. 安装redis监控

    在修改登录中心的时候,数据存储在redis里面,需要对redis进行监控,使用的是Redis-Live 参考文章: http://www.nkrode.com/article/real-time-da ...

  5. [界面开发新秀]AYUI开发360领航版系列教程-AyWindow接入[1/40]

    开发包DLL下载地址:请加入 466717219群,自己下载(已经发布ayui3.7,在群里,为了不让你作为收藏工具,也只有入群才能下载,喜欢你就进.不喜欢你还是不要来了) AYUI初衷:简单化商业软 ...

  6. Codeforces Beta Round #62 题解【ABCD】

    Codeforces Beta Round #62 A Irrational problem 题意 f(x) = x mod p1 mod p2 mod p3 mod p4 问你[a,b]中有多少个数 ...

  7. android自定义seekBar

    Android原生控件只有横向进度条一种,而且没法变换样式,比如原生rom的样子 很丑是吧,当伟大的产品设计要求更换前背景,甚至纵向,甚至圆弧状的,咋办,比如 ok,我们开始吧: 一)变换前背景 先来 ...

  8. oracle密码错误验证延迟

    补充从10g升级到11g之后需要注意的几个密码方面问题: 1. 11g默认开始密码区分大小写,可以通过把参数设置为SEC_CASE_SENSITIVE_LOGON =FALSE 屏蔽 2. 11g密码 ...

  9. jarsigner 签名android apk

    1.查看签名: jarsigner -verify app_signed.apk 查看是否签名,如果已经签名会打印 "jar verified". jarsigner -verif ...

  10. ch4 MySQL 安全管理

    第 4 章 MySQL 安全管理 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司 ...