Core跨平台支付从入门到实战

《ASP.NET Core跨平台支付从入门到实战》样章节 Web
API自定义格式化protobuf。

《ASP.NET Core跨平台支付从入门到实战》样章节 Web
API自定义格式化protobuf。

样章

Protocol Buffers
是一种轻便快捷的结构化数据存款和储蓄格式,能够用来结构化数据串行化,只怕说类别化。

它很吻合做多少存款和储蓄或 宝马X3PC
数据沟通格式。可用于通信协议、数据存款和储蓄等世界的言语毫不相关、平台无关、可扩充的体系化结构数据格式。

以下将促成2个格式化程序重回protobuf 格式。

第2新建贰个ASP.NET Core Web Application应用程序名字为ProtobufFormat,选拔Web API模板。

丰盛protobuf-net 引用。使用NuGet 命令行或许NuGet包管理器安装。

NuGet 命令行:Install-Package protobuf-net。

添加三个ProtobufFormatter 类

    public class ProtobufFormatter : OutputFormatter

    {

        public string ContentType { get; private set; }

        public ProtobufFormatter()

        {

            ContentType = “application/proto”;

           
SupportedMediaTypes.Add(Microsoft.Net.Http.Headers.MediaTypeHeaderValue.Parse(“application/proto”));

        }

 

        public override Task
WriteResponseBodyAsync(OutputFormatterWriteContext context)

        {

            if (context == null)

            {

                throw new ArgumentNullException(nameof(context));

            }

            var response = context.HttpContext.Response;

            Serializer.Serialize(response.Body, context.Object);

            return Task.FromResult(0);

        }

}

继承OutputFormatter ,然后实现WriteResponseBodyAsync
方法,起先化时赋值ContentType 以及丰裕资助MediaType。

在WriteResponseBodyAsync
方法中取得Response,调用protobuf-net的塞里alize方法将Object体系化至输出内容。protobuf
在连串化时必须钦定顺序,不然会系列化战败。

 

上边添加三个User类,来贯彻protobuf 实体。

 

    [ProtoContract]

    public class User

    {

        [ProtoMember(1)]

        public int Id { get; set; }

        [ProtoMember(2)]

        public string Name { get; set; }

        [ProtoMember(3)]

        public int Age { get; set; }

    }

 

类上急需加上ProtoContract
性子,然后字段需加上ProtoMember性子,并点名顺序。那样的贰个类才能被类别化为protobuf
格式。

 

下一场改变ValuesController控制器里的操作,使之输出protobuf。

 

    [Route(“api/[controller]”)]

    public class ValuesController : Controller

    {

        private IEnumerable<User> Users;

        public ValuesController()

        {

            Users= new User[] {

                new User() { Id=1,Name=”book”,Age=1},

                new User() { Id=2,Name=”asp.net core”,Age=10},

            };

        }

        // GET api/values

        [HttpGet]

        [Produces(“application/proto”)]

        public IEnumerable<User> Get()

        {

            return Users;

        }

 

        // GET api/values/5

        [HttpGet(“{id}”)]

        [Produces(“application/proto”)]

        public User Get(int id)

        {

            return Users.FirstOrDefault(r => r.Id == id);

        }

    }

 

在各种操作上加上Produces特性,里面值为application/proto,也正是刚刚安装的
ContentType。然后直接重返对应的指标结果即可。

倘诺以后运维应用程序,访问api/values
会发现并未有回来结果,因为还须要在AddMvc中加上对应的格式化。

开辟Startup 类中的ConfigureServices方法,将services.AddMvc()
更改为如下:

        public void ConfigureServices(IServiceCollection services)

        {

            services.AddMvc(option=> {

                option.OutputFormatters.Add(new ProtobufFormatter());

            });

        }

 

添加输出格式化程序ProtobufFormatter。

现行反革命再运转应用程序,访问api/values
会重回八个二进制文件,里面也就隐含体系化之后的数码。

 

能够新建测试程序来效仿调用Web API来检查体系化是不是科学。

新建三个.NET Core控制台应用程序,在Program.cs
中校Main方法更改为如下代码:

 

        public static void Main(string[] args)

        {

            HttpClient client = new HttpClient();

            var
stream=client.GetStreamAsync(“http://localhost:5000/api/values").Result;

            var
users=Serializer.Deserialize<List<User>>(stream);

            foreach (var item in users)

            {

               
Console.WriteLine($”ID:{item.Id}-Name:{item.Name}-Age:{item.Age}”);

            }

            Console.ReadKey();

        }

 

并将User类复制到该项目。

代码为访问http://localhost:5000/api/values获得结果,然后将其反序列化为实体对象。遍历对象,并展示出来。

先是运维Web API
应用程序,然后运营测试控制台应用程序。控制台应用程序会显示如下:

 

ID:1-Name:book-Age:1

ID:2-Name:asp.net core-Age:10

 

表示成功访问并取得结果反连串化实体对象成功。如此,自定义格式化程序ProtobufFormatter,也就马到功成促成。同理仍是能够兑现任何所急需的格式化程序。

 

样章

Protocol Buffers
是一种轻便一点也不慢的结构化数据存款和储蓄格式,能够用来结构化数据串行化,或然说类别化。

它很吻合做多少存款和储蓄或 WranglerPC
数据调换格式。可用以通信协议、数据存款和储蓄等世界的言语非亲非故、平台毫不相关、可扩展的系列化结构数据格式。

以下将完结多少个格式化程序重回protobuf 格式。

先是新建2个ASP.NET Core Web Application应用程序名字为ProtobufFormat,选用Web API模板。

累加protobuf-net 引用。使用NuGet 命令行大概NuGet包管理器安装。

NuGet 命令行:Install-Package protobuf-net。

丰富多个ProtobufFormatter 类

    public class ProtobufFormatter : OutputFormatter

    {

        public string ContentType { get; private set; }

        public ProtobufFormatter()

        {

            ContentType = “application/proto”;

           
SupportedMediaTypes.Add(Microsoft.Net.Http.Headers.MediaTypeHeaderValue.Parse(“application/proto”));

        }

 

        public override Task
WriteResponseBodyAsync(OutputFormatterWriteContext context)

        {

            if (context == null)

            {

                throw new ArgumentNullException(nameof(context));

            }

            var response = context.HttpContext.Response;

            Serializer.Serialize(response.Body, context.Object);

            return Task.FromResult(0);

        }

}

继承OutputFormatter ,然后完毕WriteResponseBodyAsync
方法,开首化时赋值ContentType 以及丰硕扶助MediaType。

在WriteResponseBodyAsync
方法中获得Response,调用protobuf-net的Serialize方法将Object系列化至输出内容。protobuf
在体系化时必须钦定顺序,不然会体系化失利。

 

上面添加二个User类,来促成protobuf 实体。

 

    [ProtoContract]

    public class User

    {

        [ProtoMember(1)]

        public int Id { get; set; }

        [ProtoMember(2)]

        public string Name { get; set; }

        [ProtoMember(3)]

        public int Age { get; set; }

    }

 

类上急需丰盛ProtoContract
性子,然后字段需加上ProtoMember个性,并点名顺序。那样的二个类才能被连串化为protobuf
格式。

 

然后改变ValuesController控制器里的操作,使之输出protobuf。

 

    [Route(“api/[controller]”)]

    public class ValuesController : Controller

    {

        private IEnumerable<User> Users;

        public ValuesController()

        {

            Users= new User[] {

                new User() { Id=1,Name=”book”,Age=1},

                new User() { Id=2,Name=”asp.net core”,Age=10},

            };

        }

        // GET api/values

        [HttpGet]

        [Produces(“application/proto”)]

        public IEnumerable<User> Get()

        {

            return Users;

        }

 

        // GET api/values/5

        [HttpGet(“{id}”)]

        [Produces(“application/proto”)]

        public User Get(int id)

        {

            return Users.FirstOrDefault(r => r.Id == id);

        }

    }

 

在各种操作上加上Produces特性,里面值为application/proto,约等于刚刚安装的
ContentType。然后直接重回对应的靶子结果即可。

假如以后运营应用程序,访问api/values
会发现并未有回来结果,因为还亟需在AddMvc中加上对应的格式化。

打开Startup 类中的ConfigureServices方法,将services.AddMvc()
更改为如下:

        public void ConfigureServices(IServiceCollection services)

        {

            services.AddMvc(option=> {

                option.OutputFormatters.Add(new ProtobufFormatter());

            });

        }

 

添加输出格式化程序ProtobufFormatter。

今后再运营应用程序,访问api/values
会再次来到八个2进制文件,里面也就带有类别化之后的多少。

 

可以新建测试程序来模拟调用Web API来检查体系化是不是正确。

新建3个.NET Core控制台应用程序,在Program.cs
上校Main方法更改为如下代码:

 

        public static void Main(string[] args)

        {

            HttpClient client = new HttpClient();

            var
stream=client.GetStreamAsync(“http://localhost:5000/api/values").Result;

            var
users=Serializer.Deserialize<List<User>>(stream);

            foreach (var item in users)

            {

               
Console.WriteLine($”ID:{item.Id}-Name:{item.Name}-Age:{item.Age}”);

            }

            Console.ReadKey();

        }

 

并将User类复制到该类型。

代码为访问http://localhost:5000/api/values获得结果,然后将其反序列化为实体对象。遍历对象,并展示出来。

首先运维Web API
应用程序,然后运维测试控制台应用程序。控制台应用程序会展现如下:

 

ID:1-Name:book-Age:1

ID:2-Name:asp.net core-Age:10

 

表示成功访问并赢得结果反系列化实体对象成功。如此,自定义格式化程序ProtobufFormatter,也就马到成功达成。同理还是能实现任何所急需的格式化程序。

 

感悟

图片 1

 

《ASP.NET Core跨平台开发从入门到实战》
成功出版,经历时间依旧蛮长的。本书是基于.NET Core 一.0所著。

.NET
Core发展高效,今后新的VS201七也发表了,导致书中有些剧情也许非常的小适用。不过理论部分及代码依旧未过时。

本书的定位为 入门书籍 ,想系统摸底ASP.NET Core 及学习ASP.NET Core
有所协助。**

能够点击文章尾部或左侧的买进链接查看详细的目录和选购。

感悟

图片 2

 

《ASP.NET Core跨平台支付从入门到实战》
成功出版,经历时间依然蛮长的。本书是基于.NET Core 1.0所著。

.NET
Core发展一点也不慢,未来新的VS20一七也公布了,导致书中某个剧情可能极小适用。然而理论部分及代码照旧未过时。

本书的向来为 入门书籍 ,想系统摸底ASP.NET Core 及学习ASP.NET Core
有所帮忙。**

能够点击小说尾部或右侧的购买链接查看详细的目录和买卖。

活动

赠书活动,此番捐献赠送6本《ASP.NET Core跨平台支付从入门到实战》。

一举手一投足规则:

在人间评论或转账至和讯并在人世评论留言。

中奖楼层规则:

截止 4月21日 12:00 楼层数-(楼层数/六-一) 递减下来。
如:
最终50层 50-(50/6-1)=43 43-7=36 36-7=29 29-7=22 22-7=15 15-7=8

每位最多评论3回,当先属于刷屏,顺延至下一个人。

4月21日 13:00 公布 公布中奖之后,大家将地点和联系格局私信于本身。

4月21日 12:30 更新

152-(152/6-1)=128 @sigmud
128-24=104 @IT胡小帅
10四-2四=80 顺延至下一个人 8一 @张君度
80-二四=5陆 @麦梗上的代码
56-24=32 @wlf921
32-24=8 @。流年。 
恭贺之上海博物馆友得到 《ASP.NET Core跨平台支付从入门到实战》一本。
多谢我们的热心肠帮衬,以上对象请将地址和联系形式尽快私信于本人,笔者会在前一周末爆发。

 

万1您觉得本文对你有救助,请点击“推荐”,谢谢。

活动

赠书活动,本次捐献赠送6本《ASP.NET Core跨平台支付从入门到实战》。

移动规则:

在下方评论或转化至新浪并在下方评论留言。

中奖楼层规则:

截止 4月21日 12:00 楼层数-(楼宇数/陆-一) 递减下来。
如:
最终50层 50-(50/6-1)=43 43-7=36 36-7=29 29-7=22 22-7=15 15-7=8

每位最多评论三回,超越属于刷屏,顺延至下一位。

4月21日 13:00 公布 公布中奖之后,大家将地方和联系形式私信于本人。

4月21日 12:30 更新

152-(152/6-1)=128 @sigmud
128-24=104 @IT胡小帅
10四-二④=80 顺延至下1位 捌一 @张君度
80-贰四=5陆 @麦梗上的代码
56-24=32 @wlf921
32-24=8 @。流年。 
恭喜之上海博物馆友得到 《ASP.NET Core跨平台开发从入门到实战》一本。
多谢我们的热心支持,以上对象请将地址和联系格局尽快私信于自身,小编会在下一周末时有发生。

 

假如你觉得本文对您有扶持,请点击“推荐”,谢谢。