/// <summary> /// 获取TOKEN /// </summary> /// <returns></returns> public virtual bool GetToken() { if (string.IsNullOrEmpty(UserID) && string.IsNullOrEmpty(Password)) { throw new Exception("没有提供用户名和密码,不能获取Token "); } using (var client = new GZipWebClient()) { string url = RepoUri.TrimEnd('/') + "/" + "tokens/"; client.Encoding = System.Text.Encoding.UTF8; client.Headers.Add("accept", "application/json;charset=utf-8"); client.Headers.Add("content-type", "application/json;charset=utf-8;"); var ts = GetTimestamp(DateTime.Now); var content = JsonConvert.SerializeObject(new { userid = UserID, password = Password, timestamp = ts, }); var retBytes = client.UploadData(url, "POST", System.Text.ASCIIEncoding.UTF8.GetBytes(content)); var ret = JsonConvert.DeserializeObject <CommandResult <TokenInfo> >(System.Text.ASCIIEncoding.UTF8.GetString(retBytes)); if (ret.Result == ResultCode.Successful && ret.Value != null) { TokenInfo.Tokens[RepoUri] = ret.Value; return(true); } throw new Exception("获取token失败 "); } }
/// <summary> /// 根据指定的URL获取数据,这里的URL是完整的URL /// </summary> /// <typeparam name="T"></typeparam> /// <param name="path"></param> /// <returns></returns> public T GetListByUrl <T>(string url, bool anonymous = false) where T : class { try { using (var client = new GZipWebClient()) { if (!anonymous) { if (TokenInfo.Tokens.ContainsKey(RepoUri) == false || TokenInfo.Tokens[RepoUri].NeedNewToken()) { GetToken(); } client.Headers.Add("Authorization", string.Format("{0} {1}", "Bearer", TokenInfo.Tokens[RepoUri].Token)); } client.Headers.Add("accept", "application/json;charset=utf-8"); client.Headers.Add(System.Net.HttpRequestHeader.AcceptEncoding, "gzip"); var retBytes = client.DownloadData(url); var ret = JsonConvert.DeserializeObject <T>(ASCIIEncoding.UTF8.GetString(retBytes)); return(ret); } } catch (Exception ex) { if (ex is WebException) { var wex = ex as WebException; var response = wex.Response as System.Net.HttpWebResponse; if (response != null && response.StatusCode == HttpStatusCode.Unauthorized) { TokenInfo.Tokens[RepoUri] = null; //如果是未授权,则清掉当前Token } } return(null); } }
/// <summary> /// 通过ID获取实体 /// </summary> /// <param name="id"></param> /// <returns></returns> public virtual QueryResult <TEntity> GetByID(TID id, bool anonymous = false) { try { using (var client = new GZipWebClient()) { if (!anonymous) { if (TokenInfo.Tokens.ContainsKey(RepoUri) == false || TokenInfo.Tokens[RepoUri].NeedNewToken()) { GetToken(); } client.Headers.Add("Authorization", string.Format("{0} {1}", "Bearer", TokenInfo.Tokens[RepoUri].Token)); } client.Headers.Add("accept", "application/json;charset=utf-8"); string url = GetControllerUrl() + HttpUtility.UrlEncode(string.Format("{0}", id), ASCIIEncoding.UTF8) + "/"; var retBytes = client.DownloadData(url); var ret = JsonConvert.DeserializeObject <QueryResult <TEntity> >(ASCIIEncoding.UTF8.GetString(retBytes)); return(ret); } } catch (Exception ex) { if (ex is WebException) { var wex = ex as WebException; var response = wex.Response as System.Net.HttpWebResponse; if (response != null && response.StatusCode == HttpStatusCode.Unauthorized) { TokenInfo.Tokens[RepoUri] = null; //如果是未授权,则清掉当前Token } } return(new QueryResult <TEntity>(ResultCode.Fail, ex.Message, null)); } }
/// <summary> /// 增加实体 /// </summary> /// <param name="info"></param> /// <returns></returns> public virtual CommandResult <TEntity> Add(TEntity info, bool anonymous = false) { try { using (var client = new GZipWebClient()) { if (!anonymous) { if (TokenInfo.Tokens.ContainsKey(RepoUri) == false || TokenInfo.Tokens[RepoUri].NeedNewToken()) { GetToken(); } client.Headers.Add("Authorization", string.Format("{0} {1}", "Bearer", TokenInfo.Tokens[RepoUri].Token)); } string url = GetControllerUrl(); client.Encoding = System.Text.Encoding.UTF8; client.Headers.Add("accept", "application/json;charset=utf-8"); client.Headers.Add("content-type", "application/json;charset=utf-8;"); var content = JsonConvert.SerializeObject(info); var retBytes = client.UploadData(url, "POST", System.Text.ASCIIEncoding.UTF8.GetBytes(content)); var ret = JsonConvert.DeserializeObject <CommandResult <TEntity> >(System.Text.ASCIIEncoding.UTF8.GetString(retBytes)); if (ret.Result == ResultCode.Successful && ret.Value != null) { info.ID = ret.Value.ID; } return(ret); } } catch (Exception ex) { if (ex is WebException) { var wex = ex as WebException; var response = wex.Response as System.Net.HttpWebResponse; if (response != null && response.StatusCode == HttpStatusCode.Unauthorized) { TokenInfo.Tokens[RepoUri] = null; //如果是未授权,则清掉当前Token } } return(new CommandResult <TEntity>(ResultCode.Fail, ex.Message, null)); } }
/// <summary> /// 删除实体 /// </summary> /// <param name="info"></param> /// <returns></returns> public virtual CommandResult Delete(TEntity info, bool anonymous = false) { try { using (var client = new GZipWebClient()) { if (!anonymous) { if (TokenInfo.Tokens.ContainsKey(RepoUri) == false || TokenInfo.Tokens[RepoUri].NeedNewToken()) { GetToken(); } client.Headers.Add("Authorization", string.Format("{0} {1}", "Bearer", TokenInfo.Tokens[RepoUri].Token)); } string url = GetControllerUrl() + HttpUtility.UrlEncode(string.Format("{0}", info.ID), ASCIIEncoding.UTF8) + "/"; client.Encoding = System.Text.Encoding.UTF8; client.Headers.Add("accept", "application/json;charset=utf-8"); client.Headers.Add("content-type", "application/json;charset=utf-8;"); var retBytes = client.UploadString(url, "DELETE", string.Empty); if (!string.IsNullOrEmpty(retBytes)) { return(JsonConvert.DeserializeObject <CommandResult>(retBytes)); } return(new CommandResult(ResultCode.Successful, string.Empty)); } } catch (Exception ex) { if (ex is WebException) { var wex = ex as WebException; var response = wex.Response as System.Net.HttpWebResponse; if (response != null && response.StatusCode == HttpStatusCode.Unauthorized) { TokenInfo.Tokens[RepoUri] = null; //如果是未授权,则清掉当前Token } } return(new CommandResult(ResultCode.Fail, ex.Message)); } }
/// <summary> /// 根据指定的路径获取数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="path"></param> /// <returns></returns> public QueryResultList <T> GetListBySubPath <T>(string path, SearchCondition con, bool anonymous = false) where T : class { try { using (var client = new GZipWebClient()) { if (!anonymous) { if (TokenInfo.Tokens.ContainsKey(RepoUri) == false || TokenInfo.Tokens[RepoUri].NeedNewToken()) { GetToken(); } client.Headers.Add("Authorization", string.Format("{0} {1}", "Bearer", TokenInfo.Tokens[RepoUri].Token)); } string url = GetControllerUrl() + path.TrimStart('/'); if (con != null) { url += "?" + ToQueryString(con); } client.Headers.Add("accept", "application/json;charset=utf-8"); client.Headers.Add(System.Net.HttpRequestHeader.AcceptEncoding, "gzip"); var retBytes = client.DownloadData(url); var ret = JsonConvert.DeserializeObject <QueryResultList <T> >(ASCIIEncoding.UTF8.GetString(retBytes)); return(ret); } } catch (Exception ex) { if (ex is WebException) { var wex = ex as WebException; var response = wex.Response as System.Net.HttpWebResponse; if (response != null && response.StatusCode == HttpStatusCode.Unauthorized) { TokenInfo.Tokens[RepoUri] = null; //如果是未授权,则清掉当前Token } } return(new QueryResultList <T>(ResultCode.Fail, ex.Message, new List <T>())); } }