Esempio n. 1
0
        /// <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));
            }
        }
Esempio n. 2
0
        /// <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("网关效验通过"));
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        public void GetBodyAsync_WithNullMessageContent_ThrowsInvalidOperationException()
        {
            var response = new ApiResponseJson <object>(new HttpResponseMessage());

            Assert.ThrowsAsync <InvalidOperationException>(() => response.GetBodyAsync());
        }