private async Task MakeFeed(DataUriType type, HttpMultipartFormDataContent content) { try { if (type == DataUriType.CreateFeed) { if (await DataHelper.PostDataAsync(type, content) != null) { SendSuccessful(); } } else { if (await DataHelper.PostDataAsync(type, content, FeedId) != null) { SendSuccessful(); } } } catch (CoolapkMessageException cex) { UIHelper.ShowMessage(cex.Message); if (cex.MessageStatus == CoolapkMessageException.RequestCaptcha) { var dialog = new CaptchaDialog(); await dialog.ShowAsync(); } } }
public static async Task <T> GetDataAsync <T>(DataUriType dataUriType, bool forceRefresh = false, params object[] args) { string uri = string.Format(GetUriStringTemplate(dataUriType), args); string json = string.Empty; T result = default; if (forceRefresh || !responseCache.ContainsKey(uri)) { json = await GetJson(uri); result = await Task.Run(() => JsonConvert.DeserializeObject <T>(json, new JsonSerializerSettings { Error = (_, e) => { if (!string.IsNullOrEmpty(json)) { var o = JsonConvert.DeserializeObject <Models.Json.MessageModel.Rootobject>(json, new JsonSerializerSettings { Error = (__, ee) => ee.ErrorContext.Handled = true }); if (o != null) { throw new CoolapkMessageException(o.Message); } } e.ErrorContext.Handled = true; } })); if (responseCache.ContainsKey(uri)) { responseCache[uri] = result; int i = uri.IndexOf("page="); if (i != -1) { string u = uri.Substring(i); var needDelete = (from item in responseCache where item.Key != uri where item.Key.IndexOf(u, StringComparison.Ordinal) == 0 select item).ToArray(); foreach (var item in needDelete) { responseCache.Remove(item.Key); } } } else { responseCache.Add(uri, result); } } else { result = (T)responseCache[uri]; } return(result); }
/// <summary> /// 从服务器中获取数据。 /// </summary> /// <param name="type"> /// 要获取的数据的类型。 /// </param> /// <param name="args"> /// 一个参数数组,其中的内容用于替换格式符号。 /// </param> public static async Task <JToken> GetDataAsync(DataUriType type, bool forceRefresh, params object[] args) { string uri = string.Format(GetUriStringTemplate(type), args); string json; if (forceRefresh || !responseCache.ContainsKey(uri)) { json = await GetJson(uri); if (responseCache.ContainsKey(uri)) { responseCache[uri] = json; int i = uri.IndexOf("page="); if (i != -1) { string u = uri.Substring(i); var needDelete = (from item in responseCache where item.Key != uri where item.Key.IndexOf(u, StringComparison.Ordinal) == 0 select item).ToArray(); foreach (var item in needDelete) { responseCache.Remove(item.Key); } } } else { responseCache.Add(uri, json); } } else { json = responseCache[uri] as string; } var o = JObject.Parse(json); JToken token = null; if (!string.IsNullOrEmpty(json) && !o.TryGetValue("data", out token) && o.TryGetValue("message", out _)) { throw new CoolapkMessageException(o); } else { return(token); } }
/// <summary> /// 从服务器中获取数据。 /// </summary> /// <param name="dataUriType">要获取的数据的类型。</param> /// <param name="args">一个参数数组,其中的内容用于替换格式符号。</param> public static async Task <JToken> GetData(DataUriType dataUriType, params object[] args) { var json = await NetworkHelper.GetJson(string.Format(GetUriStringTemplate(dataUriType), args)); JToken token = null; var o = JObject.Parse(json); if (!string.IsNullOrEmpty(json) && !o.TryGetValue("data", out token) && o.TryGetValue("message", out JToken value)) { throw new Exceptions.ServerException($"{value}"); } return(token); }
public static async Task <T> GetDataAsync <T>(DataUriType dataUriType, bool forceRefresh = false, params object[] args) { string uri = string.Format(GetUriStringTemplate(dataUriType), args); string json = string.Empty; T result = default; if (forceRefresh || !responseCache.ContainsKey(uri)) { json = await NetworkHelper.GetJson(uri); result = await Task.Run(() => JsonConvert.DeserializeObject <T>(json, new JsonSerializerSettings { Error = (_, e) => { if (!string.IsNullOrEmpty(json)) { var o = JsonConvert.DeserializeObject <Models.Json.MessageModel.Rootobject>(json, new JsonSerializerSettings { Error = (__, ee) => ee.ErrorContext.Handled = true }); if (o != null) { throw new CoolapkMessageException(o.Message); } } e.ErrorContext.Handled = true; } })); if (responseCache.ContainsKey(uri)) { responseCache[uri] = result; } else { responseCache.Add(uri, result); } } else { result = (T)responseCache[uri]; } return(result); }
public static async Task <JToken> PostDataAsync(DataUriType type, Windows.Web.Http.IHttpContent content, params object[] args) { var uri = string.Format(GetUriStringTemplate(type), args); var json = await PostAsync(uri, content); var o = JObject.Parse(json); JToken token = null; if (!string.IsNullOrEmpty(json) && !o.TryGetValue("data", out token) && o.TryGetValue("message", out _)) { throw new CoolapkMessageException(o); } else { return(token); } }
/// <summary> /// 从服务器中获取数据。 /// </summary> /// <param name="type"> /// 要获取的数据的类型。 /// </param> /// <param name="args"> /// 一个参数数组,其中的内容用于替换格式符号。 /// </param> public static async Task <JToken> GetDataAsync(DataUriType type, params object[] args) { bool forceRefresh = false; string uri = string.Format(GetUriStringTemplate(type), args); string json; if (forceRefresh || !responseCache.ContainsKey(uri)) { json = await NetworkHelper.GetJson(uri); if (responseCache.ContainsKey(uri)) { responseCache[uri] = json; } else { responseCache.Add(uri, json); } } else { json = responseCache[uri] as string; } var o = JObject.Parse(json); JToken token = null; if (!string.IsNullOrEmpty(json) && !o.TryGetValue("data", out token) && o.TryGetValue("message", out JToken value)) { throw new CoolapkMessageException(value); } else { return(token); } }
private static string GetUriStringTemplate(DataUriType type) { switch (type) { case DataUriType.CheckLoginInfo: return("/account/checkLoginInfo"); case DataUriType.CreateFeed: return("/feed/createFeed"); case DataUriType.CreateFeedReply: return("/feed/reply?id={0}&type=feed"); case DataUriType.CreateReplyReply: return("/feed/reply?id={0}&type=reply"); case DataUriType.GetAnswers: return("/question/answerList?id={0}&sort={1}&page={2}{3}{4}"); case DataUriType.GetDyhDetail: return("/dyh/detail?dyhId={0}"); case DataUriType.GetDyhFeeds: return("/dyhArticle/list?dyhId={0}&type={1}&page={2}{3}{4}"); case DataUriType.GetFeedDetail: return("/feed/detail?id={0}"); case DataUriType.GetFeedReplies: return("/feed/replyList?id={0}&listType={1}&page={2}{3}&discussMode=1&feedType=feed&blockStatus=0&fromFeedAuthor={4}"); case DataUriType.GetHotReplies: return("/feed/hotReplyList?id={0}&page={1}{2}&discussMode=1"); case DataUriType.GetIndexPage: return("{0}{1}page={2}"); case DataUriType.GetIndexPageNames: return("/main/init"); case DataUriType.GetLikeList: return("/feed/likeList?id={0}&listType=lastupdate_desc&page={1}{2}"); case DataUriType.GetMyPageCard: return("/account/loadConfig?key=my_page_card_config"); case DataUriType.GetNotifications: return("/notification/{0}?page={1}{2}{3}"); case DataUriType.GetNotificationNumbers: return("/notification/checkCount"); case DataUriType.GetReplyReplies: return("/feed/replyList?id={0}&listType=&page={1}{2}&discussMode=0&feedType=feed_reply&blockStatus=0&fromFeedAuthor=0"); case DataUriType.GetSearchWords: return("/search/suggestSearchWordsNew?searchValue={0}&type=app"); case DataUriType.GetShareList: return("/feed/forwardList?id={0}&type=feed&page={1}"); case DataUriType.GetTagDetail: return("/topic/newTagDetail?tag={0}"); case DataUriType.GetTagFeeds: return("/topic/tagFeedList?tag={0}&page={1}{2}{3}&listType={4}&blockStatus=0"); case DataUriType.GetUserFeeds: return("/user/feedList?uid={0}&page={1}{2}{3}"); case DataUriType.GetUserHistory: return("/user/hitHistoryList?page={0}{1}{2}"); case DataUriType.GetUserList: return("/user/{0}?uid={1}&page={2}{3}{4}"); case DataUriType.GetUserRecentHistory: return("/user/recentHistoryList?page={0}{1}{2}"); case DataUriType.GetUserSpace: return("/user/space?uid={0}"); case DataUriType.GetUserProfile: return("/user/profile?uid={0}"); case DataUriType.OperateFollow: return("/user/follow?uid={0}"); case DataUriType.OperateLike: return("/feed/like{0}?id={1}&detail=0"); case DataUriType.OperateUnfollow: return("/user/follow?uid={0}"); case DataUriType.OperateUnlike: return("/feed/unlike{0}?id={1}&detail=0"); case DataUriType.RequestValidate: return("/account/requestValidate"); case DataUriType.SearchFeeds: return("/search?type=feed&feedType={0}&sort={1}&searchValue={2}&page={3}{4}&showAnonymous=-1"); case DataUriType.SearchTags: return("/search?type=feedTopic&searchValue={0}&page={1}{2}&showAnonymous=-1"); case DataUriType.SearchUsers: return("/search?type=user&searchValue={0}&page={1}{2}&showAnonymous=-1"); case DataUriType.SearchWords: return("/search/suggestSearchWordsNew?searchValue={0}&type=app"); default: throw new ArgumentException($"{typeof(DataUriType).FullName}值错误"); } }
static string GetUriStringTemplate(DataUriType type) { switch (type) { case DataUriType.CheckLoginInfo: return("/account/checkLoginInfo"); case DataUriType.GetAnswers: return("/question/answerList?id={0}&sort={1}&page={2}{3}{4}"); case DataUriType.GetDyhDetail: return("/dyh/detail?dyhId={0}"); case DataUriType.GetDyhFeeds: return("/dyhArticle/list?dyhId={0}&type={1}&page={2}{3}{4}"); case DataUriType.GetFeedDetail: return("/feed/detail?id={0}"); case DataUriType.GetFeedReplies: return("/feed/replyList?id={0}&listType={1}&page={2}{3}{4}&discussMode=1&feedType=feed&blockStatus=0&fromFeedAuthor={5}"); case DataUriType.GetHotReplies: return("/feed/hotReplyList?id={0}&page={1}{2}&discussMode=1"); case DataUriType.GetLikeList: return("/feed/likeList?id={0}&listType=lastupdate_desc&page={1}{2}{3}"); case DataUriType.GetIndexPage: return("{0}{1}page={2}"); case DataUriType.GetIndexPageNames: return("/main/init"); case DataUriType.GetNotifications: return("/notification/{0}?page={1}{2}{3}"); case DataUriType.GetNotificationNumbers: return("/notification/checkCount"); case DataUriType.GetReplyReplies: return("/feed/replyList?id={0}&listType=&page={1}{2}&discussMode=0&feedType=feed_reply&blockStatus=0&fromFeedAuthor=0"); case DataUriType.GetSearchWords: return("/search/suggestSearchWordsNew?searchValue={0}&type=app"); case DataUriType.GetShareList: return("/feed/forwardList?id={0}&type=feed&page={1}"); case DataUriType.GetTagDetail: return("/topic/newTagDetail?tag={0}"); case DataUriType.GetTagFeeds: return("/topic/tagFeedList?tag={0}&page={1}{2}{3}&listType={4}&blockStatus=0"); case DataUriType.GetUserFeeds: return("/user/feedList?uid={0}&page={1}{2}{3}"); case DataUriType.GetUserList: return("/user/{0}?uid={1}&page={2}{3}{4}"); case DataUriType.GetUserSpace: return("/user/space?uid={0}"); case DataUriType.GetUserProfile: return("/user/profile?uid={0}"); case DataUriType.OperateFollow: return("/user/follow?uid={0}"); case DataUriType.OperateLike: return("/feed/like{0}?id={1}&detail=0"); case DataUriType.OperateUnfollow: return("/user/follow?uid={0}"); case DataUriType.OperateUnlike: return("/feed/unlike{0}?id={1}&detail=0"); case DataUriType.SearchFeeds: return("/search?type=feed&feedType={0}&sort={1}&searchValue={2}&page={3}{4}&showAnonymous=-1"); case DataUriType.SearchTags: return("/search?type=feedTopic&searchValue={0}&page={1}{2}&showAnonymous=-1"); case DataUriType.SearchUsers: return("/search?type=user&searchValue={0}&page={1}{2}&showAnonymous=-1"); default: return(string.Empty); } }