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