/// <summary> /// 带实体类检查的调用 /// </summary> public async Task <ApiResponseJson> InvokeCheck(string param) { try { #if !DEBUG // 网关效验 var gatewayResult = GatewayValidate(); if (!gatewayResult.Status) { return(gatewayResult); } #endif // DTO参数效验 var dto = ToObject <T>(param); var result = EntityValidator.Check(dto); if (!result.Status) { return(result); } return(await Invoke(dto)); } catch (AggregateException exp) { var err = string.Empty; var statusCode = 500; foreach (var inner in exp.InnerExceptions) { err += inner.Message; var exception = inner as FaultException; if (exception != null) { statusCode = exception.Code.Name.ConvertType(0); } } return(ApiResponseJson.Error(err, null, statusCode)); } catch (FaultException exp) { return(ApiResponseJson.Error(exp.Message, exp.Action, exp.Code.Name.ConvertType(0))); } catch (System.Exception exp) { return(ApiResponseJson.Error(exp.GetType().FullName, null, 500)); } }
/// <summary> /// 网关效验 /// </summary> /// <returns></returns> protected ApiResponseJson GatewayValidate() { //1、內网校验,ip格式 192.168*,10.*,ipV6的地址:fe80::*,feco::* var ip = GatewayHeader.AppIP; if (!(ip.StartsWith("192.168.") || ip.StartsWith("10.") || ip == "::1" || ip == "127.0.0.1" || ip.ToLower().StartsWith("fe80::") || ip.ToLower().StartsWith("feco::"))) { return(ApiResponseJson.Error($"网关Ip({ip})禁止访问")); } #region 参数值校验 if (GatewayHeader.GatewayTimestamp <= 0) { return(ApiResponseJson.Error($"时间戳({GatewayHeader.GatewayTimestamp})错误")); } // 时间戳有误 if (string.IsNullOrEmpty(GatewayHeader.GatewayVer)) { return(ApiResponseJson.Error("网关版本号不能为空")); } // 网关版本号不能为空 if (string.IsNullOrEmpty(GatewayHeader.AppID)) { return(ApiResponseJson.Error("授权应用ID不能为空")); } // 授权应用ID if (string.IsNullOrEmpty(GatewayHeader.ServiceSign)) { return(ApiResponseJson.Error("签名不能为空")); } // 签名为空 #endregion //2、时间戳有效期校验 var currentTimestamp = DateTime.Now.Subtract(Convert.ToDateTime("1970-1-1 08:00:00")).TotalSeconds; if (currentTimestamp - GatewayHeader.GatewayTimestamp > 60 * 10) { return(ApiResponseJson.Error($"请求过期,时间戳({GatewayHeader.GatewayTimestamp})")); } if (GatewayHeader.BuilderSign() != GatewayHeader.ServiceSign) { return(ApiResponseJson.Error($"签名校验失败,接收到的签名为({GatewayHeader.ServiceSign})")); } return(ApiResponseJson.Success("网关效验通过")); }
public void GetBodyAsync_WithValidContent_GetsContentAsType() { var expected = new JsonTestModel { FullName = "test", Id = "Sample", LastChange = new DateTime(2000, 1, 1, 0, 0, 0) }; var body = JsonConvert.SerializeObject(expected); var response = new ApiResponseJson <JsonTestModel>(new HttpResponseMessage { Content = new StringContent(body) }); var result = response.GetBodyAsync().Result; Assert.AreEqual(expected, result); }
/// <summary> /// 检测实体类值状况 /// </summary> public static ApiResponseJson Check <TEntity>(TEntity info) { // 返回错误 Dictionary <string, List <string> > dicError; var json = Check(info, out dicError) ? ApiResponseJson.Success("实体类检测通过") : ApiResponseJson.Error("实体类检测失败"); if (!json.Status) { foreach (var errs in dicError) { json.StatusMessage += $"属性:{errs.Key},出错了:"; for (var i = 0; i < errs.Value.Count; i++) { json.StatusMessage += $"{i + 1}、{errs.Value[i]};"; } json.StatusMessage += $" "; } } return(json); }
public void GetBodyAsync_WithNullMessageContent_ThrowsInvalidOperationException() { var response = new ApiResponseJson <object>(new HttpResponseMessage()); Assert.ThrowsAsync <InvalidOperationException>(() => response.GetBodyAsync()); }