/// <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())); }
/// <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))); }
/// <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())); }
/// <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))); }
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); } }