话不多说,直接进入主题。

需求:基于Http请求接收Json格式数据,返回Json格式的数据。

整理:对接收的数据与返回数据进行统一的封装整理,方便处理接收与返回数据,并对数据进行验证,通过C#的特性对token进行验证,并通过时间戳的方式统一处理接收与返回的时间格式。

请求Json格式:

{
"Cmd": "login",
"Token": "",
"PageNo": 0,
"OnePageNum": 0,
"Params": {
"UserName": "emrys",
"Pwd":"123456"
}
}

返回Json格式

{
"Cmd": "login",
"Result": 0,
"ResultNote": "Success",
"TotalRecordNum": 0,
"Pages": 0,
"PageNo": 0,
"Detail": {
"UserName": "lining",
"Email":"123456789@qq.com",
"Age":"20"
}
}

关于代码会免费开源,所以不做详讲,下面主要是简单的应用。

一、新建新接口

  直接新建类名与请求的接口Cmd名称一致,继承BaseAPIService,并在名称后加上APIService,最后实现抽象方法 Process

  public override APIResult Process()
{
// 1、获取参数
// 1.1、所有参数均在Request里,Request可以获取封装以后所有的接收数据
string cmd = Reqeust.cmd;
int pageNo = Reqeust.pageNo;
object paramses = Reqeust.Params; // 1.2、在Params可以获取所有Params里所有的数据
string userName = Convert.ToString(Params["UserName"]); // 1.3、可以通过方法获取数据
string userName2 = GetParams<string>("UserName");
string pwd = GetParams<string>("Pwd");
int age = GetParams<int>("Age"); // 1.4、通过GetParams的第二个参数,可以设置参数是否是必须传入的参数,默认为必须传入的参数
string userName3 = GetParams<string>("UserName", false); // UserName不是必须需要传入的参数
string userName4 = GetParams<string>("UserName", true); // UserName是必须需要传入的参数 // 1.5、时间格式做了统一的处理 传入格式为long类型的时间戳 如:1466871403000
DateTime time = GetParams<DateTime>("Time"); // 1.6、如传入的参数有很多,通过方法GetParams一个一个获取则比较麻烦,所以如果遇到参数较多的情况下,需要新建一个Class,属性与Params参数一致即可,如LoginRequestModel,通过方法ConvertToModel则可把参数全部封装到类中,方便使用参数。
LoginRequestModel login = ConvertToModel<LoginRequestModel>(); // 1.7、可以在传入参数Class中上和类的属性上标记特性[APIRequired]来标记参数是否是必须的参数。 // 2、设置返回值
// 2.1、 直接设置返回值
//return APIJson(new { name = "emrys" }); // 2.2、 返回String
//return APIContext("xxxxxxxxxxxxxx"); // 2.3、返回对象
// return APIJson(new LoginRequestModel { }); // 2.4 直接返回需要的对象值
//return new APIResultJson { resultNote = "xxxxxxx" }; return APIJson(new { name = "emrys" });
}

二、设置验证每个请求的权限

如果需要对每个请求做登录的验证,则只需要在Main类中60行继续实现验证的部分代码即可,如果不需要验证的请求则在类上加上特性APINotNeedToken

      if (nt == null || (!nt.NotNeedToken))
{
// 如果需要验证 // 根据token获取用户信息
var user = GetUser(req.token) ;
if (user == null)
{
// 判断Token是否失效
throw new APIException(, "Token失效。");
}
req.APIWorkContext = new APIWorkContext();
req.APIWorkContext.UserId = Convert.ToInt32(user.user_id);
req.APIWorkContext.UserEmail = user.email; }

然后可以在每个接口类中的Process方法中获取到UserId,UserEmail等

         // 3 获取登录信息
int userId = WorkContext.UserId;

三、实现不同的时间格式

如果需要实现不同的时间格式,如不用时间戳,自定义格式为:yyyy-MM-dd HH:mm:ss,继承类DateTimeConverterBase,并实现ReadJson和WriteJson两个方法。并在返回时设置时间格式。

1、在代码Main中的100行中更改代码

         // 设置时间格式
var jsonSettings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
// 设置过滤null值为不显示
jsonSettings.Converters.Add(new UnixDateTimeConverter());UnixDateTimeConverter为自定义时间类型。 return JsonConvert.SerializeObject(res, jsonSettings);

源码地址:https://github.com/Emrys5/Emrys.API

ASP.NET API(MVC) 对APP接口(Json格式)接收数据与返回数据的统一管理的更多相关文章

  1. asp.net core mvc 读取配置文件appsettings.json

    上一篇我们将了读取自定义配置文件.这篇我们讲一下asp.net core mvc里读取自带的配置文件 appsettings.json 首先创建个asp.net core mvc项目,项目里有Prog ...

  2. Django-choices字段值对应关系(性别)-MTV与MVC科普-Ajax发json格式与文件格式数据-contentType格式-Ajax搭配sweetalert实现删除确认弹窗-自定义分页器-批量插入-07

    目录 models 字段补充 choices 参数/字段(用的很多) MTV与MVC模型 科普 Ajax 发送 GET.POST 请求的几种常见方式 用 Ajax 做一个小案例 准备工作 动手用 Aj ...

  3. html中通过js获取接口JSON格式数据解析以及跨域问题

    前言:本人自学前端开发,一直想研究下js获取接口数据在html的实现,顺利地找到了获取数据的方法,但是有部分接口在调用中出现无法展示数据.经查,发现时跨域的问题,花费了一通时间,随笔记录下过程,以方便 ...

  4. Asp.net 将DataTable 或者DataSet 转换为Json 格式

    Web 开发中,将从数据库中取到的数据直接转换为 Json 格式的数据,在前台通过Ajax 无刷新显示在界面上,下面提供将DataTable 或者DataSet 转换为Json 的方法 /// < ...

  5. 后端返回值以json的格式返回,前端以json格式接收

    以随便一个类为例子:这个例子是查询企业主营类别前5事项 一.以json数组的格式返回到前端中 (1)后端将结果绑定到param中,然后将结果以为json数组的格式返回到前端 /** * 查询企业主营类 ...

  6. Spring MVC 04-- 接收前端参数json格式的方式

    /** * 第一种:以RequestParam接收 * 前端传来的是json数据不多时:{"id":1},可以直接用@RequestParam来获取值 * * @param id ...

  7. asp.net core mvc视频A:笔记2-2.接收数据

    传参方式一:使用内置方法传递 运行结果 其他获取方法 Session对象在HttpContext中 启用Session 使用Session 运行演示 传参方式二:数据绑定 普通类型(string).自 ...

  8. 使用 ASP.NET Core MVC 创建 Web API——响应数据的内容协商(七)

    使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 使 ...

  9. Spring Boot 无侵入式 实现RESTful API接口统一JSON格式返回

    前言 现在我们做项目基本上中大型项目都是选择前后端分离,前后端分离已经成了一个趋势了,所以总这样·我们就要和前端约定统一的api 接口返回json 格式, 这样我们需要封装一个统一通用全局 模版api ...

随机推荐

  1. Cocos2d-x 3.x游戏开发之旅

    Cocos2d-x 3.x游戏开发之旅 钟迪龙 著   ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x ...

  2. iOS开发-捕获程序崩溃日志

    iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下面就介绍如何在iOS中实现: 1. 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时 ...

  3. javascript面向对象系列第四篇——选项卡的实现

    前面的话 面向对象的应用并非只是读几本书那么容易,需要有大量的工程实践做基础才能真正理解并学会使用它.本文将用面向对象的技术来制作一个简单的选项卡 图示说明 由图示结果看到,这是一个非常简单的选项卡. ...

  4. Android 内存管理 &Memory Leak & OOM 分析

    转载博客:http://blog.csdn.net/vshuang/article/details/39647167 1.Android 进程管理&内存 Android主要应用在嵌入式设备当中 ...

  5. javascript之一切皆为对象2

    其实呢,“函数function”和“对象object”之间还有这么一句话:对象是通过函数来创建的,而函数却又是一种对象. 这个函数是一种对象,上节中“Javascript之一切皆为对象1”也清楚的阐述 ...

  6. iOS开发之SQLite--C语言接口规范(五)——iOS开发使用SQLite实例

    本篇博客就使用前面操作SQLite的知识来实现如何去插入,删除和更新数据.然后再把操作SQlite数据库常用的方法进行一个封装.把常用方法进行封装后,把Cars数据库中的其中一个表的数据进行查询,并在 ...

  7. 关于有默认值的字段在用EF做插入操作时的思考(续)

    问题描述 今天下午(看现在这时间,应该是昨天下午了哈),园友 choon 写了这样一篇博文<关于有默认值的字段在用EF做插入操作时的思考>. 博文内容主要记录的是 choon 使用 EF ...

  8. 利用private font改变PDF文件的字体

    利用private font改变PDF文件的字体 前几天做项目,需要使用未安装的字体来改变PDF的文件.以前并没有实现过类似的功能,幸运的是我在网上找到了类似的教程,并成功实现了这个功能. 下面就跟大 ...

  9. iOS OC语言: Block底层实现原理

    先来简单介绍一下BlockBlock是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,Block可以在任何时候执行. Block和函数的相似性:(1)可以保存代码(2) ...

  10. table-cell实现宽度自适应布局

    利用table-cell可以实现宽度自适应布局. table-cell有一些比较好用的属性,比如垂直居中,自适应高度宽度等,为元素设置table-cell布局之后,元素的margin失效,paddin ...