asp.netapi(mvc)对app接口(json格式)接收数据与返回数据的统一管理

Emrys Emrys     2022-08-03     125

关键词:

 

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

需求:基于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

 

 

  

使用fiddler对手机app进行抓包

在做手机或移动端APP的接口测试时,需要从开发人员那里获取接口文档,接口文档应该包括完整的功能接口、接口请求方式、接口请求URL、接口请求参数、接口返回参数。如果当前项目没有接口文档,则可以使用fiddler对APP进行... 查看详情

从 asp.net API 中的方法返回后,如何保持线程运行?

】从asp.netAPI中的方法返回后,如何保持线程运行?【英文标题】:Howtokeepathreadrunning,afterreturningfromamethodinanasp.netAPI?【发布时间】:2020-03-2105:57:03【问题描述】:在foreach循环中,我使用Task.Run来调用一个方法来为每个元素执行一... 查看详情

将图像发布到 asp.net API 2 和 angular 2

】将图像发布到asp.netAPI2和angular2【英文标题】:postimagetoasp.netAPI2andangular2【发布时间】:2016-11-2700:12:56【问题描述】:当我尝试将图像发布到ASP.NetAPI2时,我得到415(不支持的媒体类型)此资源不支持请求实体的媒体类型“multip... 查看详情

mvc web api身份验证令牌cors问题

...】:2019-09-0411:12:00【问题描述】:早安,我正在使用asp.netapi和Angular。当我尝试从我的api获取身份验证令牌时,我收到错误我有一个控制器,它为我的应用程序返回一个身份验证令牌。这是控制器的逻辑[HttpPost][Route("authenticate")] 查看详情

如何设置 ASP.NET API / AngularJS 项目

】如何设置ASP.NETAPI/AngularJS项目【英文标题】:HowtosetupaASP.NETAPI/AngularJSproject【发布时间】:2015-04-1608:32:15【问题描述】:我正在启动我自己的AngularWeb应用程序。我有使用c#和angular编码的经验,但我从来不需要设置自己的项目/解... 查看详情

如何从php调用“asp.net api上传文件”

】如何从php调用“asp.netapi上传文件”【英文标题】:Howtocall"asp.netapiuploadfile"fromphp【发布时间】:2014-08-1907:56:09【问题描述】:我使用asp.net创建一个服务api,并使用方法POST上传任何文件,我想使用代码php调用该api,但我... 查看详情

在 ASP.NET API 中将数据插入多个表

】在ASP.NETAPI中将数据插入多个表【英文标题】:InsertdatatomultiplestablesinASP.NETAPI【发布时间】:2021-10-0919:14:21【问题描述】:对不起我的英语不好。我目前正在使用Angular学习ASP.NETCore,但遇到了一些问题。我有一个包含两个包含... 查看详情

接口自动化测试python_使用python对json进行操作

如何使用Python对excel进行简单的操作,这个对接口自动化测试很重要一.准备一份Json文档,如下格式:{"register":{"mobile":"15500000090"},"login":{"mobile":"15500000090","password":"111111"}}   1.可能大家会比较疑惑,这个格式和普通的Json... 查看详情

接口测试之用fiddler对手机app进行抓包

Fiddler是一款非常流行并且实用的http抓包工具,它的原理是在本机开启了一个http的代理服务器,然后它会转发所有的http请求和响应,因此,它比一般的firebug或者是chrome自带的抓包工具要好用的多。不仅如此,... 查看详情

三层架构与mvc

...计中,采用面向抽象编程,即上层对下层的调用,是通过接口实现的。而下层对上层的真正服务提供者,是下层接口的实现。服 查看详情

React.js 与 ASP MVC 与 create-react-app 集成

】React.js与ASPMVC与create-react-app集成【英文标题】:React.jsintegrationwithASPMVCwithcreate-react-app【发布时间】:2019-07-2501:35:27【问题描述】:我是React世界的新手,我正在尝试将它集成到一个使用ASPMVC.net的新项目中。我想将React.js与create... 查看详情

ASP.NET 短信网关 API

...买了一个SMS网关,他们只给了我HTTP和XMLAPI,但我需要ASP.NETAPI来处理我的项目。任何人都可以帮助我如何将以下API转换为ASP.NET(c#)API。HTTPAPIhttp://indiansms.smsmaker.in/api/sendmsg.php?user=** 查看详情

MVC 模型绑定到接口

】MVC模型绑定到接口【英文标题】:MVCmodelbindingtointerfaces【发布时间】:2011-03-0216:50:40【问题描述】:我创建了一个类似于的OrderFormViewModelpublicclassOrderFormViewModelpublicIOrderDetailsget;set;publicIDeliveryDetailsget;set;publicIPaymentDetailsget;set; 查看详情

抖音对指定用用户的所有视频抓取策略

参考技术A抖音对指定用用户的所有视频抓取策略方案1:接口参数有加密,需脱壳app进行反编译破解加密参数。(难度较大,不容易实现)方案2:使用appium自动化框架配合mitmdump中间人代理截取手机发送的数据包,从而获取数据... 查看详情

MVC 3 将实体作为接口传递

】MVC3将实体作为接口传递【英文标题】:MVC3passingentityasanInterface【发布时间】:2012-01-0303:50:27【问题描述】:我目前正在使用Ninject作为我的DI的MVC3项目,业务对象存储在单独的程序集中。我遇到了控制器参数的问题,在发回CRUD... 查看详情

PHP 中的 ASP.Net API 使用

】PHP中的ASP.NetAPI使用【英文标题】:ASP.NetAPIConsumptioninPHP【发布时间】:2016-04-1805:16:05【问题描述】:各位专家,大家好,因为我是PHP新手,但我在ASP.Net方面有很好的经验。我想将我用PHP开发的网站与我的ASP.net项目和SQLServer集... 查看详情

qt中的MVC和接口问题

】qt中的MVC和接口问题【英文标题】:MVCinqtandproblemwithinterfaces【发布时间】:2011-07-0718:11:54【问题描述】:我想创建视图并通过构造函数将其传递给控制器​​。所以,我已经创建了界面:#include<QString>classIMainViewpublic:virtual... 查看详情

mvc通过controller创建交互接口

publicJsonResultHome(stringuserName,stringpassword,stringtype){List<person>list=newList<person>();personli=newperson();li.name="111";li.gender="1";li.name="222";li.gender="2";list.Add(li); 查看详情