コード例 #1
0
ファイル: AManager.cs プロジェクト: luomingui/ApiManager-1
        /// <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());
        }
コード例 #2
0
ファイル: Core.cs プロジェクト: smithydll/boxsocial
        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);
        }
コード例 #3
0
ファイル: Functions.cs プロジェクト: smithydll/boxsocial
        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);
                }*/
            }
        }
コード例 #4
0
ファイル: Core.cs プロジェクト: smithydll/boxsocial
        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);
        }