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":"[email protected]",
        "Age":"20"
    }
}

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

一、新建新接口

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

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

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

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

      if (nt == null || (!nt.NotNeedToken))
                {
                    // 如果需要验证  

                    //  根据token获取用户信息
                    var user = GetUser(req.token) ;
                    if (user == null)
                    {
                        // 判断Token是否失效
                        throw new APIException(200, "Token失效。");
                    }
                    req.APIWorkContext = new APIWorkContext();
                    req.APIWorkContext.UserId = Convert.ToInt32(user.user_id);
                    req.APIWorkContext.UserEmail = user.email;

                }

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

1         // 3 获取登录信息
2             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

时间: 2024-12-19 04:53:58

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

web Api自定义部分Action的JSON格式输出

昨天项目中要部分Api的JSON格式需要特殊处理.最开始直接重写controller的JSON方法.经测试,当action直接返回数据的时候,不会调用Json方法. 然后找了各种方法,都不行.在群里问了.直到看到群友发的一个直接移除所有API的JSON格式方法的时候.图片如下: 然后就想到了Api的ActionFilterAttribute.就解决了自己的需求. 上代码.懒得写说明. 1 public class AppFilterAttribte : ActionFilterAttribute

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

目录 models 字段补充 choices 参数/字段(用的很多) MTV与MVC模型 科普 Ajax 发送 GET.POST 请求的几种常见方式 用 Ajax 做一个小案例 准备工作 动手用 Ajax 实现效果 contentType 前后端传输数据编码格式 ajax 提交数据 ajax发 json 格式数据 ajax 传文件 序列化组件 利用 sweetalert 搭建页面(弹窗) 弹窗中文支持不太好,手动修改样式 页面数据没刷新的问题 自定义分页器 批量插入测试数据 bulk_creat

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

Web 开发中,将从数据库中取到的数据直接转换为 Json 格式的数据,在前台通过Ajax 无刷新显示在界面上,下面提供将DataTable 或者DataSet 转换为Json 的方法 /// <summary> /// DataTable 转换成Json 操作类 /// </summary> public static class ConvertJson { #region DataSet转换为Json /// <summary> /// DataSet转换为Json

AJAX制作JSON格式的局部实时更新数据的方法

废话不多,上代码,前台: 主要使用了死循环一秒钟读取JS一次去刷新页面(递归的思想)单独对ShowData这个DIV的数据进行刷新 ,个人觉得还是需要优化的.请大神指点 <script type="text/javascript"> $(function () { var i = 0; function setTimeOutPost() { $.ajax({ type: "post", url: "/UserControl/DoData.ash

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

以随便一个类为例子:这个例子是查询企业主营类别前5事项 (1)后端将结果绑定到param中,然后将结果以为json的格式返回到前端 /** * 查询企业主营类别前5事项 * @param request * @param response * @param config * @throws Exception * @author hongxy * 2017年6月1日下午2:21:14 */ public void getEnterpriseMainCategory(HttpServletRequ

php编写app接口(二)-PHP生成XML数据

在Reponse.php文件中添加方法xml(): public static function xml(){ header('Content-type: text/xml'); $xml = "<?xml version='1.0' encoding = 'UTF-8'?>\n"; $xml .="<root>\n"; $xml .="<code>200</code>\n"; $xml .=&qu

java 后台框架 支持APP接口调用 APP后台 手机后台框架java springmvc mybaits mysql oracle html5 后台框架

获取[下载地址]   QQ: 313596790   [免费支持更新]A 代码生成器(开发利器);全部是源码     增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势C 安全权限框架shiro ;  Shiro 是一个用

java 后台框架 支持APP接口调用 APP后台

获取[下载地址]   QQ: 313596790   [免费支持更新]支持三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]A 代码生成器(开发利器);      增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid

java 后台框架 支持APP接口调用 APP后台 手机后台框架

开发快报: 页面打印功能,websocket 强制下线功能,玩转websocket技术  [金牌]获取[下载地址]   QQ: 313596790A 代码生成器(开发利器);     增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都