Example #1
0
        /// <summary>
        /// Get请求
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="apiurl">WebApi的Url地址(不带参数)</param>
        /// <param name="tokenurl">WebApi的请求Token的Url地址(不带参数)</param>
        /// <param name="query">请求参数("keyname"模式,按字典顺序拼接)</param>
        /// <param name="queryStr">请求参数("key=name"模式,按字典顺序拼接)</param>
        /// <param name="tokenid">请求TokenId,唯一标识符</param>
        /// <param name="sign">是否启动签名验证</param>
        /// <returns></returns>
        public static T Get <T>(string apiurl, string tokenurl, string query, string queryStr, int tokenid, bool sign = true)
        {
            HttpWebRequest request   = (HttpWebRequest)WebRequest.Create(apiurl + "?" + queryStr);
            string         timeStamp = GetTimeStamp(); //获取时间戳
            string         nonce     = GetRandom();    //获取随机数

            //加入头信息
            request.Headers.Add("tokenid", tokenid.ToString());     //当前请求ID
            request.Headers.Add("timestamp", timeStamp);            //发起请求时的时间戳(单位:毫秒)
            request.Headers.Add("nonce", nonce);                    //发起请求时的时间戳(单位:毫秒)

            //是否启用签名
            if (sign)
            {
                request.Headers.Add("signature", GetSignature(tokenurl, timeStamp, nonce, tokenid, query));   //当前请求内容的数字签名
            }

            request.Method      = "GET";
            request.ContentType = "application/json";
            request.Timeout     = 90000;
            request.Headers.Set("Pragma", "no-cache");
            HttpWebResponse response      = (HttpWebResponse)request.GetResponse();
            Stream          streamReceive = response.GetResponseStream();
            StreamReader    streamReader  = new StreamReader(streamReceive, Encoding.UTF8);
            string          strResult     = streamReader.ReadToEnd();

            streamReader.Close();
            streamReceive.Close();
            request.Abort();
            response.Close();

            HttpResponseMsg resultObj = JsonConvert.DeserializeObject <HttpResponseMsg>(strResult);

            return(JsonConvert.DeserializeObject <T>(resultObj.data.ToString()));
        }
Example #2
0
        /// <summary>
        /// Get请求
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="webApi"></param>
        /// <param name="queryStr"></param>
        /// <param name="appKey"></param>
        /// <returns></returns>
        private static HttpResponseMsg Get <T>(string ApiUrl, string query, string queryStr, string appKey, bool sign = true)
        {
            string          strResult = GetJson(ApiUrl, query, queryStr, appKey, sign);
            HttpResponseMsg resMsg    = JsonConvert.DeserializeObject <HttpResponseMsg>(strResult);
            var             resultT   = JsonConvert.DeserializeObject <T>(resMsg.Data.ToString());

            resMsg.Data = resultT;

            return(resMsg);
        }
        public HttpResponseMessage AddProudct(Product product)
        {
            var resultMsg = new HttpResponseMsg
            {
                StatusCode = (int)StatusCodeEnum.Success,
                Info       = StatusCodeEnum.Success.GetEnumText(),
                Data       = product
            };

            return(HttpResponseExtension.ToJson(JsonConvert.SerializeObject(resultMsg)));
        }
        public HttpResponseMessage GetProduct(string id)
        {
            var product = new Product {
                Id = 1, Name = "哇哈哈", Count = 10, Price = 38.8
            };
            var resultMsg = new HttpResponseMsg
            {
                StatusCode = (int)StatusCodeEnum.Success,
                Info       = StatusCodeEnum.Success.GetEnumText(),
                Data       = product
            };

            return(HttpResponseExtension.ToJson(JsonConvert.SerializeObject(resultMsg)));
        }
Example #5
0
        /// <summary>
        /// Post请求
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="apiurl">WebApi的Url地址(不带参数)</param>
        /// <param name="tokenurl">WebApi的请求Token的Url地址(不带参数)</param>
        /// <param name="data">请求参数("keyname"模式,按字典顺序拼接)</param>
        /// <param name="tokenid">请求TokenId,唯一标识符</param>
        /// <returns></returns>
        public static T Post <T>(string apiurl, string tokenurl, string data, int tokenid)
        {
            byte[]         bytes   = Encoding.UTF8.GetBytes(data);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(apiurl);

            string timeStamp = GetTimeStamp();      //获取时间戳
            string nonce     = GetRandom();         //获取随机数

            //加入头信息
            request.Headers.Add("tokenid", tokenid.ToString());                                        //当前请求ID
            request.Headers.Add("timestamp", timeStamp);                                               //发起请求时的时间戳(单位:毫秒)
            request.Headers.Add("nonce", nonce);                                                       //发起请求时的随机数
            request.Headers.Add("signature", GetSignature(tokenurl, timeStamp, nonce, tokenid, data)); //当前请求内容的数字签名

            //写数据
            request.Method        = "POST";
            request.ContentLength = bytes.Length;
            request.ContentType   = "application/json";
            request.Timeout       = 300000;
            request.Headers.Set("Pragma", "no-cache");
            Stream reqstream = request.GetRequestStream();

            reqstream.Write(bytes, 0, bytes.Length);

            //读数据
            HttpWebResponse response      = (HttpWebResponse)request.GetResponse();
            Stream          streamReceive = response.GetResponseStream();
            StreamReader    streamReader  = new StreamReader(streamReceive, Encoding.UTF8);
            string          strResult     = streamReader.ReadToEnd();

            //关闭流
            reqstream.Close();
            streamReader.Close();
            streamReceive.Close();
            request.Abort();
            response.Close();

            HttpResponseMsg resultObj = JsonConvert.DeserializeObject <HttpResponseMsg>(strResult);

            return(JsonConvert.DeserializeObject <T>(resultObj.data.ToString()));
        }
Example #6
0
        /// <summary>
        /// 根据用户名获取token
        /// </summary>
        /// <param name="staffId"></param>
        /// <returns></returns>
        public HttpResponseMessage GetToken(string staffId)
        {
            HttpResponseMsg resultMsg;
            int             id;

            //判断参数是否合法
            if (string.IsNullOrEmpty(staffId) || (!int.TryParse(staffId, out id)))
            {
                resultMsg = new HttpResponseMsg
                {
                    StatusCode = (int)StatusCodeEnum.ParameterError,
                    Info       = StatusCodeEnum.ParameterError.GetEnumText(),
                    Data       = ""
                };
                return(HttpResponseExtension.ToJson(JsonConvert.SerializeObject(resultMsg)));
            }

            //插入缓存
            TokenInfo token = (TokenInfo)HttpRuntime.Cache.Get(id.ToString());

            if (HttpRuntime.Cache.Get(id.ToString()) == null)
            {
                token = new TokenInfo
                {
                    StaffId    = id,
                    SignToken  = Guid.NewGuid(),
                    ExpireTime = DateTime.Now.AddDays(1)
                };
                HttpRuntime.Cache.Insert(token.StaffId.ToString(), token, null, token.ExpireTime, TimeSpan.Zero);
            }

            //返回token信息
            resultMsg = new HttpResponseMsg
            {
                StatusCode = (int)StatusCodeEnum.Success,
                Info       = "",
                Data       = token
            };

            return(HttpResponseExtension.ToJson(JsonConvert.SerializeObject(resultMsg)));
        }
Example #7
0
        public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            HttpResponseMsg resultMsg;
            var             request = actionContext.Request;
            string          method = request.Method.Method;
            string          staffid = String.Empty, timestamp = string.Empty, nonce = string.Empty, signature = string.Empty;
            int             id;

            if (request.Headers.Contains("staffid"))
            {
                staffid = HttpUtility.UrlDecode(request.Headers.GetValues("staffid").FirstOrDefault());
            }
            if (request.Headers.Contains("timestamp"))
            {
                timestamp = HttpUtility.UrlDecode(request.Headers.GetValues("timestamp").FirstOrDefault());
            }
            if (request.Headers.Contains("nonce"))
            {
                nonce = HttpUtility.UrlDecode(request.Headers.GetValues("nonce").FirstOrDefault());
            }

            if (request.Headers.Contains("signature"))
            {
                signature = HttpUtility.UrlDecode(request.Headers.GetValues("signature").FirstOrDefault());
            }

            //GetToken方法不需要进行签名验证
            if (actionContext.ActionDescriptor.ActionName == "GetToken")
            {
                if (string.IsNullOrEmpty(staffid) || (!int.TryParse(staffid, out id) || string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(nonce)))
                {
                    resultMsg = new HttpResponseMsg
                    {
                        StatusCode = (int)StatusCodeEnum.ParameterError,
                        Info       = StatusCodeEnum.ParameterError.GetEnumText(),
                        Data       = ""
                    };
                    actionContext.Response = HttpResponseExtension.ToJson(JsonConvert.SerializeObject(resultMsg));
                    base.OnActionExecuting(actionContext);
                    return;
                }
                else
                {
                    base.OnActionExecuting(actionContext);
                    return;
                }
            }

            //判断请求头是否包含以下参数
            if (string.IsNullOrEmpty(staffid) || (!int.TryParse(staffid, out id) || string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(nonce) || string.IsNullOrEmpty(signature)))
            {
                resultMsg              = new HttpResponseMsg();
                resultMsg.StatusCode   = (int)StatusCodeEnum.ParameterError;
                resultMsg.Info         = StatusCodeEnum.ParameterError.GetEnumText();
                resultMsg.Data         = "";
                actionContext.Response = HttpResponseExtension.ToJson(JsonConvert.SerializeObject(resultMsg));
                base.OnActionExecuting(actionContext);
                return;
            }

            //判断timespan是否有效
            double ts1;
            double ts2  = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalMilliseconds;
            bool   timespanvalidate = double.TryParse(timestamp, out ts1);
            double ts   = ts2 - ts1;
            bool   falg = ts > int.Parse(WebSettingsConfig.UrlExpireTime) * 1000;

            if (falg || (!timespanvalidate))
            {
                resultMsg = new HttpResponseMsg
                {
                    StatusCode = (int)StatusCodeEnum.URLExpireError,
                    Info       = StatusCodeEnum.URLExpireError.GetEnumText(),
                    Data       = ""
                };
                actionContext.Response = HttpResponseExtension.ToJson(JsonConvert.SerializeObject(resultMsg));
                base.OnActionExecuting(actionContext);
                return;
            }

            //判断token是否有效
            TokenInfo token = (TokenInfo)HttpRuntime.Cache.Get(id.ToString());

            if (HttpRuntime.Cache.Get(id.ToString()) == null)
            {
                resultMsg = new HttpResponseMsg
                {
                    StatusCode = (int)StatusCodeEnum.TokenInvalid,
                    Info       = StatusCodeEnum.TokenInvalid.GetEnumText(),
                    Data       = ""
                };
                actionContext.Response = HttpResponseExtension.ToJson(JsonConvert.SerializeObject(resultMsg));
                base.OnActionExecuting(actionContext);
                return;
            }

            var signtoken = token.SignToken.ToString();

            //根据请求类型拼接参数
            NameValueCollection form = HttpContext.Current.Request.QueryString;
            string data;

            switch (method)
            {
            case "POST":
                Stream       stream       = HttpContext.Current.Request.InputStream;
                string       responseJson = string.Empty;
                StreamReader streamReader = new StreamReader(stream);
                data = streamReader.ReadToEnd();
                break;

            case "GET":
                //第一步:取出所有get参数
                IDictionary <string, string> parameters = new Dictionary <string, string>();
                for (int f = 0; f < form.Count; f++)
                {
                    string key = form.Keys[f];
                    parameters.Add(key, form[key]);
                }

                // 第二步:把字典按Key的字母顺序排序
                IDictionary <string, string> sortedParams        = new SortedDictionary <string, string>(parameters);
                IEnumerator <KeyValuePair <string, string> > dem = sortedParams.GetEnumerator();

                // 第三步:把所有参数名和参数值串在一起
                StringBuilder query = new StringBuilder();
                while (dem.MoveNext())
                {
                    string key   = dem.Current.Key;
                    string value = dem.Current.Value;
                    if (!string.IsNullOrEmpty(key))
                    {
                        query.Append(key).Append(value);
                    }
                }
                data = query.ToString();
                break;

            default:
                resultMsg              = new HttpResponseMsg();
                resultMsg.StatusCode   = (int)StatusCodeEnum.HttpMehtodError;
                resultMsg.Info         = StatusCodeEnum.HttpMehtodError.GetEnumText();
                resultMsg.Data         = "";
                actionContext.Response = HttpResponseExtension.ToJson(JsonConvert.SerializeObject(resultMsg));
                base.OnActionExecuting(actionContext);
                return;
            }

            bool result = SignExtension.Validate(timestamp, nonce, id, signtoken, data, signature);

            if (!result)
            {
                resultMsg              = new HttpResponseMsg();
                resultMsg.StatusCode   = (int)StatusCodeEnum.HttpRequestError;
                resultMsg.Info         = StatusCodeEnum.HttpRequestError.GetEnumText();
                resultMsg.Data         = "";
                actionContext.Response = HttpResponseExtension.ToJson(JsonConvert.SerializeObject(resultMsg));
                base.OnActionExecuting(actionContext);
            }
            else
            {
                base.OnActionExecuting(actionContext);
            }
        }