• 说说Web API数据格式化——Json


    题外话

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

    窗外的天空

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

  • 相关阅读:
    安装IIS
    安装Asp.Net(4.0.30319)
    转载一个博文
    文件操作引出流(二)FileStream和
    《学习之道》第十一章目前此章最后一点-重复
    《学习之道》第十一章意群
    Views
    Django的基本使用
    MVC框架
    Zookeeper
  • 原文地址:https://www.cnblogs.com/mafly/p/4503905.html
Copyright © 2020-2023  润新知