話不多說,直接進入主題。 需求:基於Http請求接收Json格式數據,返回Json格式的數據。 整理:對接收的數據與返回數據進行統一的封裝整理,方便處理接收與返回數據,並對數據進行驗證,通過C#的特性對token進行驗證,並通過時間戳的方式統一處理接收與返回的時間格式。 請求Json格式: 返回Js ...
話不多說,直接進入主題。
需求:基於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