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

需求:基于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. UWP自动填充控件AutoSuggestBox小优化

    UWP提供的AutoSuggestBox本身非常好用,在项目中经常用到,但是当我们使用时发现一下不人性化的设置,例子1如下: <Page x:Class="SelfInkCanvas. ...

  2. WaitType:CXPACKET

    CXPACKET 等待类型是SQL Server 并发执行一个query时产生的.在run一个big query时,SQL Server充分利用系统的所有资源(CPU,Memory,IO),在最短时间 ...

  3. OPEN CASCADE Multiple Variable Function

    OPEN CASCADE Multiple Variable Function eryar@163.com Abstract. Multiple variable function with grad ...

  4. ASP.NET MVC5 网站开发实践(一) - 项目框架

    前几天算是开题了,关于怎么做自己想了很多,但毕竟没做过项目既不知道这些想法有无必要,也不知道能不能实现,不过邓爷爷说过"摸着石头过河"吧.这段时间看了一些博主的文章收获很大,特别是 ...

  5. Bootstrap Metronic 学习记录(二)菜单栏

    1.简介 1)  .环境配置 2)  .提取页面 2).动态生成菜单(无限级别树) 2.系统环境配置 项目需要程序数据支撑,这里选择MVC5.0+EF6.0[SQLSERVER](不对MVC架构和SQ ...

  6. .NET平台开源项目速览(10)FluentValidation验证组件深入使用(二)

    在上一篇文章:.NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一) 中,给大家初步介绍了一下FluentValidation验证组件的使用情况.文章从构建间的验证器开 ...

  7. Android自定义属性

    上一篇讲解了Android自定义View,这篇来讲解一下Android自定义属性的使用,让你get新技能.希望我的分享能帮助到大家. 做Android布局是件很享受的事,这得益于他良好的xml方式.使 ...

  8. 1Z0-053 争议题目解析694

    1Z0-053 争议题目解析694 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 694.As part of archiving the historical data, you ...

  9. 跟我学PHP第二篇- 配置Mysql以及PHP WampServer篇(1)

    大家好,昨天我给大家介绍了如何去安装ZEND STUDIO,下面昨天文章的链接: http://www.cnblogs.com/kmsfan/p/zendStudio.html 本节为配置的第一部分, ...

  10. 3.Struts2配置文件标签介绍

    Struts2的很多核心功能都是由拦截器实现的. struts-default.xml中定义了这些拦截器与Result类型. 所以,不继承struts-default包,Struts2提供的很多核心功 ...