using System; using System.Text; using System.Web.UI.WebControls; using System.IO; using System.Net; using System.Security.Cryptography; public partial class Default2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { AppSettings _settings = new AppSettings(); string imgData = ReadImgToString(FileUpload1); Uri url = new Uri(_settings.Url); string body = "{\"common\":{\"app_id\":\""+_settings.AppID+ "\"}, \"business\":{ \"ent\":\"teach-photo-print\", \"aue\" :\"raw\" },\"data\":{\"image\":\""+ imgData+"\"}}"; string digestBase64 = "SHA-256=" + HMACSha256(body); DateTime basic = DateTime.UtcNow; string date = basic.ToString("r"); string signatureOrigin = "host: " + url.Host + "\ndate: " + date + "\nPOST /v2/itr HTTP/1.1\ndigest: " + digestBase64; string sha = HMAC_SHA256(signatureOrigin, _settings.ApiSecret); string authorization = "api_key=\"" + _settings.ApiKey + "\", algorithm=\"hmac-sha256\", headers=\"host date request-line digest\", signature=\"" + sha + "\""; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(_settings.Url); request.Method = "POST"; request.ContentType = "application/json"; request.Host = url.Host; request.Date = basic; request.Headers.Set("Digest", digestBase64); request.Headers.Set("Authorization", authorization); byte[] postBytes = null; postBytes = Encoding.UTF8.GetBytes(body); request.ContentLength = postBytes.Length; using (Stream reqStream = request.GetRequestStream()) { reqStream.Write(postBytes, 0, postBytes.Length); } string result = string.Empty; using (WebResponse response = request.GetResponse()) { if (response != null) { using (Stream stream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { result = reader.ReadToEnd(); } } } } Response.Write(result); } private string HMAC_SHA256(string message, string secret) { byte[] keyByte = System.Text.Encoding.UTF8.GetBytes(secret); byte[] messageBytes = System.Text.Encoding.UTF8.GetBytes(message); HMACSHA256 hmacsha256 = new HMACSHA256(keyByte); byte[] hashmessage = hmacsha256.ComputeHash(messageBytes); return Convert.ToBase64String(hashmessage); } private static string HMACSha256(string body) { HMACSHA256 hMACSHA256 = new HMACSHA256(); byte[] date = Encoding.UTF8.GetBytes(body); date = hMACSHA256.ComputeHash(date); hMACSHA256.Clear(); return System.Convert.ToBase64String(date); } public string ReadImgToString(FileUpload f) { Stream fstream = f.PostedFile.InputStream; byte[] imgData = new byte[fstream.Length]; fstream.Read(imgData, 0, imgData.Length); fstream.Close(); string imgdata = Convert.ToBase64String(imgData); return imgdata; } }
下面是一个简单的类
using System; using System.Collections.Generic; using System.Linq; using System.Web; public class AppSettings { public string AppID = "5666666665"; public string ApiSecret = "7c6667fd0fb0034e0d2df6263d678efd"; public string ApiKey = "b9ed1e666d01f74905b17bc3b9a4063"; public string Url = "http://rest-api.xfyun.cn/v2/itr"; }