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

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM