public ApiResult Post(PostModel post) { if (!ModelState.IsValid) { var errorList = ModelState.Where(x => x.Value.Errors.Count > 0) .ToDictionary(x => x.Key, x => x.Value.Errors.Select(e => e.ErrorMessage)); return(apiResult(0, errorList)); } try { var formData = JsonConvert.DeserializeObject <Dictionary <string, string> >(post.ApiRequest); // 需加入簽章 if (post.IsNeedSignature) { var tmp = formData.OrderBy(x => x.Key) .Select(x => string.Format("{0}={1}", x.Key, x.Value)); string signature = CryptUtility.HMACSHA1(post.ApiKey, string.Join("&", tmp)); formData.Add("signature", signature); } // 財政部測試環境 if (post.IsTestMode) { post.ApiUrl = post.ApiUrl.Replace("//www.", "//wwwtest.") .Replace("//api.", "//wwwtest."); } var query = formData.Select(x => string.Format("{0}={1}", x.Key, HttpUtility.UrlEncode(x.Value))); string url = string.Format("{0}?{1}", post.ApiUrl.TrimEnd('?'), string.Join("&", query)); if (post.IsClientMode) { return(apiResult(100, url)); } else { string result = null; using (HttpClient hc = new HttpClient()) { // 30 秒 Time Out hc.Timeout = TimeSpan.FromSeconds(30); result = hc.GetStringAsync(url).Result; } return(apiResult(1, new { url, result })); } } catch (Exception ex) { return(apiResult(-1, ex.Message)); } }