ASP.NET API(MVC) 对APP接口(Json格式)接收数据与返回数据的统一管理
话不多说,直接进入主题。
需求:基于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格式)接收数据与返回数据的统一管理的更多相关文章
- asp.net core mvc 读取配置文件appsettings.json
上一篇我们将了读取自定义配置文件.这篇我们讲一下asp.net core mvc里读取自带的配置文件 appsettings.json 首先创建个asp.net core mvc项目,项目里有Prog ...
- Django-choices字段值对应关系(性别)-MTV与MVC科普-Ajax发json格式与文件格式数据-contentType格式-Ajax搭配sweetalert实现删除确认弹窗-自定义分页器-批量插入-07
目录 models 字段补充 choices 参数/字段(用的很多) MTV与MVC模型 科普 Ajax 发送 GET.POST 请求的几种常见方式 用 Ajax 做一个小案例 准备工作 动手用 Aj ...
- html中通过js获取接口JSON格式数据解析以及跨域问题
前言:本人自学前端开发,一直想研究下js获取接口数据在html的实现,顺利地找到了获取数据的方法,但是有部分接口在调用中出现无法展示数据.经查,发现时跨域的问题,花费了一通时间,随笔记录下过程,以方便 ...
- Asp.net 将DataTable 或者DataSet 转换为Json 格式
Web 开发中,将从数据库中取到的数据直接转换为 Json 格式的数据,在前台通过Ajax 无刷新显示在界面上,下面提供将DataTable 或者DataSet 转换为Json 的方法 /// < ...
- 后端返回值以json的格式返回,前端以json格式接收
以随便一个类为例子:这个例子是查询企业主营类别前5事项 一.以json数组的格式返回到前端中 (1)后端将结果绑定到param中,然后将结果以为json数组的格式返回到前端 /** * 查询企业主营类 ...
- Spring MVC 04-- 接收前端参数json格式的方式
/** * 第一种:以RequestParam接收 * 前端传来的是json数据不多时:{"id":1},可以直接用@RequestParam来获取值 * * @param id ...
- asp.net core mvc视频A:笔记2-2.接收数据
传参方式一:使用内置方法传递 运行结果 其他获取方法 Session对象在HttpContext中 启用Session 使用Session 运行演示 传参方式二:数据绑定 普通类型(string).自 ...
- 使用 ASP.NET Core MVC 创建 Web API——响应数据的内容协商(七)
使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 使 ...
- Spring Boot 无侵入式 实现RESTful API接口统一JSON格式返回
前言 现在我们做项目基本上中大型项目都是选择前后端分离,前后端分离已经成了一个趋势了,所以总这样·我们就要和前端约定统一的api 接口返回json 格式, 这样我们需要封装一个统一通用全局 模版api ...
随机推荐
- pl/sql里的exists和in的差别
项目中有个需要需要如下pl/sql(数据库是MariaDB) ) AS small FROM cmp_ent_main a WHERE createTime<'2016-9-21' ,,) ) ...
- Atitit 深入理解耦合Coupling的原理与attilax总结
Atitit 深入理解耦合Coupling的原理与attilax总结 耦合是指两个或两个以上的电路元件或电网络等的输入与输出之间存在紧密配合与相互影响,并通过相互作用从一侧向另一侧传输能量的现 ...
- 从零学java--传智播客
java的输入需要引用Scanner包 import java.util.Scanner; class ScannerDemo{ public static void main(String[] ar ...
- 【原创】开源Math.NET基础数学类库使用(05)C#解析Delimited Formats数据格式
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...
- Android自定义spinner下拉框实现的实现
一:前言 本人参考博客:http://blog.csdn.net/jdsjlzx/article/details/41316417 最近在弄一个下拉框,发现Android自带的很难实现我的功能,于是去 ...
- java 线程 Thread 使用介绍,包含wait(),notifyAll() 等函数使用介绍
(原创,转载请说明出处!谢谢--http://www.cnblogs.com/linguanh/) 此文目的为了帮助大家较全面.通俗地了解线程 Thread 相关基础知识! 目录: --线程的创建: ...
- CSS3中border-radius、box-shadow与gradient那点事儿
一.border-radius border-radius用于添加圆角边框,用处非常广泛. 1)一个值,代表了四个角 .radius-one { /* Safari 3-4, iOS 1-3.2, A ...
- JS去除空格方法记录
JS中去掉空格 //去除空格 String.prototype.Trim = function() { return this.replace(/\s+/g, ""); ...
- svn 几个常用命令(持续更新)
1:获取某个版本号(3583)下的代码 svn co http://tech.yoai.com:8300/c ...
- PHP实现新浪长链接转化成短链接API
我们经常收到类似于这样的短信(如下图),发现其中的链接并不是常规的网址链接,而是个短小精悍的短链接,产品中经常需要这样的需求,如果在给用户下发的短信中是一个很长的连接,用户体验肯定很差,因此我们需要实 ...