private string GetKey(string areaId, string type, string date, string appId, string privateKey) { var hmac = HMACSHA1.Create(); var publicKey = GetPublicKey(areaId, type, date, appId); var data = System.Text.Encoding.UTF8.GetBytes(publicKey); //密钥 var key = System.Text.Encoding.UTF8.GetBytes(privateKey); hmac.Key = key; //对数据进行签名 var signedData = hmac.ComputeHash(data); return Convert.ToBase64String(signedData); } private string GetPublicKey(string areaId, string type, string date, string appId) { return string.Format("http://open.weather.com.cn/data/?areaid={0}&type={1}&date={2}&appid={3}", areaId, type, date, appId); } /// <summary> /// 获取请求URL /// </summary> /// <param name="areaId">地区ID,例:北京=101010100</param> /// <param name="type">预警:alarm 实况:observe 指数:index 常规预报(24小时):forecast1d</param> /// <param name="date">日期,年月日时分,例:201410091040</param> /// <param name="appId"></param> /// <param name="privateKey"></param> /// <returns></returns> public string GetUrl(string areaId, string type, string date, string appId, string privateKey) { string key = GetKey(areaId, type, date, appId, privateKey); return string.Format("http://open.weather.com.cn/data/?areaid={0}&type={1}&date={2}&appid={3}&key={4}", areaId, type, date, appId.Substring(0, 6), HttpUtility.UrlEncodeUnicode(key)); }