zoukankan      html  css  js  c++  java
  • 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  

     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

      

    作者:Emrys
    出处:http://www.cnblogs.com/emrys5/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    《易中天中华史》——易中天
    《易中天品三国》——易中天
    Excel 实现多列文本合并/合并单元格内容 的三种方法
    Excel函数OFFSET的用法、举例
    【转】链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "未指定的错误"。+SQL Server Management Studio中访问EXCEL 2007(XLSX)文件的方法
    SQL 2005启用组件Ad Hoc Distributed Queries
    FTP 550 Permission denied 只能建文件夹,没法删除及上传文件的原因说明
    Access中"''80004005''"操作必须使用一个可更新的查询"错误的解决办法
    修改 打开方式为Excel
    VMware10新建虚拟机
  • 原文地址:https://www.cnblogs.com/emrys5/p/emrys-api.html
Copyright © 2011-2022 走看看