/// <summary> /// Sends an HttpRequest and returns the response string. /// Handles redirect responses by updating the httpclient's header.location /// </summary> /// <param name="httpClient"></param> /// <param name="requestString"></param> /// <param name="responseFormat"></param> /// <returns></returns> public static async Task <string> GetResponseStringAsync(HttpClient httpClient, string requestString, ResponseFormats responseFormat) { bool resendRequest; HttpResponseMessage responseMessage; do { httpClient.DefaultRequestHeaders.Accept.Clear(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(_MEDIA_TYPE + responseFormat)); resendRequest = false; try { responseMessage = httpClient.GetAsync(requestString).Result; } catch (Exception e) { return(null); } switch (responseMessage.StatusCode) { case HttpStatusCode.Redirect: var newBaseUri = responseMessage.Headers.Location.ToString().Replace(requestString, string.Empty); httpClient = new HttpClient(new WebRequestHandler { AllowAutoRedirect = false }) { BaseAddress = new Uri(newBaseUri) }; resendRequest = true; break; } } while (resendRequest); return(await responseMessage.Content.ReadAsStringAsync()); }
public Core(TPage page, ResponseFormats responseFormat, Mysql db, Template template) { HeadHooks += new HookHandler(Core_HeadHooks); PrimitiveHeadHooks += new HookHandler(Core_PrimitiveHeadHooks); FootHooks +=new HookHandler(Core_FootHooks); PageHooks += new HookHandler(Core_Hooks); PostHooks += new HookHandler(Core_PostHooks); LoadApplication += new LoadHandler(Core_LoadApplication); this.page = page; this.db = db; this.template = template; this.responseFormat = responseFormat; ItemKey.populateItemTypeCache(this); //QueryCache.populateQueryCache(); userProfileCache = new PrimitivesCache(this); itemsCache = new NumberedItemsCache(this); accessControlCache = new AccessControlCache(this); primitiveTypes = ItemKey.GetPrimitiveTypes(this); }
public void ReturnPermissionGroupList(ResponseFormats responseFormat) { string namePart = core.Http.Form["name-field"]; long itemId = core.Functions.FormLong("item", 0); long itemTypeId = core.Functions.FormLong("type", 0); if (string.IsNullOrEmpty(namePart)) { namePart = core.Http["name_field"]; } if (!(itemId > 0 && itemTypeId > 0)) { if (core.Session.SignedIn) { itemId = core.Session.LoggedInMember.Id; itemTypeId = core.Session.LoggedInMember.TypeId; } } if (itemId > 0 && itemTypeId > 0) { ItemKey ik = new ItemKey(itemId, itemTypeId); List<PrimitivePermissionGroup> groups = null; NumberedItem ni = NumberedItem.Reflect(core, ik); Primitive primitive = null; Dictionary<ItemKey, string[]> permissiveNames = new Dictionary<ItemKey, string[]>(); List<PrimitivePermissionGroup> permissionKeys = new List<PrimitivePermissionGroup>(); if (ni.GetType().IsSubclassOf(typeof(Primitive))) { primitive = (Primitive)ni; } else { primitive = ((IPermissibleItem)ni).Owner; } groups = new List<PrimitivePermissionGroup>(); int itemGroups = 0; Type type = ni.GetType(); if (type.GetMethod(type.Name + "_GetItemGroups", new Type[] { typeof(Core) }) != null) { groups.AddRange((List<PrimitivePermissionGroup>)type.InvokeMember(type.Name + "_GetItemGroups", BindingFlags.Public | BindingFlags.Static | BindingFlags.InvokeMethod, null, null, new object[] { core })); itemGroups = groups.Count; } groups.AddRange(core.GetPrimitivePermissionGroups(primitive)); foreach (PrimitivePermissionGroup group in groups) { if (!string.IsNullOrEmpty(group.LanguageKey)) { permissiveNames.Add(group.ItemKey, new string[] { core.Prose.GetString(group.LanguageKey), group.Tile }); permissionKeys.Add(group); } else { permissiveNames.Add(group.ItemKey, new string[] { group.DisplayName, group.Tile }); permissionKeys.Add(group); } } List<User> friends = primitive.GetPermissionUsers(namePart); foreach (User friend in friends) { permissiveNames.Add(friend.ItemKey, new string[] { friend.DisplayName, friend.Tile }); permissionKeys.Add(new PrimitivePermissionGroup(friend.ItemKey, friend.DisplayName, friend.Tile)); } switch (responseFormat) { case ResponseFormats.Xml: core.Response.SendPermissionGroupDictionary("permissionSelect", permissiveNames); break; case ResponseFormats.Json: JsonSerializer js; StringWriter jstw; JsonTextWriter jtw; js = new JsonSerializer(); jstw = new StringWriter(); jtw = new JsonTextWriter(jstw); js.NullValueHandling = NullValueHandling.Ignore; core.Http.WriteJson(js, permissionKeys); break; } /*if (core.Session.IsLoggedIn) { List<Friend> friends = core.Session.LoggedInMember.GetFriends(namePart); Dictionary<long, string[]> friendNames = new Dictionary<long, string[]>(); foreach (Friend friend in friends) { friendNames.Add(friend.Id, new string[] { friend.DisplayName, friend.UserTile }); } core.Ajax.SendUserDictionary("friendSelect", friendNames); }*/ } }
public Core(OPage page, ResponseFormats responseFormat, Mysql db) { LoadApplication += new LoadHandler(Core_LoadApplication); this.db = db; this.responseFormat = responseFormat; ItemKey.populateItemTypeCache(this); //QueryCache.populateQueryCache(); userProfileCache = new PrimitivesCache(this); itemsCache = new NumberedItemsCache(this); accessControlCache = new AccessControlCache(this); primitiveTypes = ItemKey.GetPrimitiveTypes(this); }