コード例 #1
0
ファイル: DownloadScreenView.cs プロジェクト: nobbele/Quaver
 /// <summary>
 ///     Creates the container for user profiles.
 /// </summary>
 private void CreateUserProfile() => UserProfile = new UserProfileContainer(this)
 {
     Parent    = Container,
     Alignment = Alignment.TopRight,
     Y         = Navbar.Line.Y + Navbar.Line.Thickness,
     X         = -28
 };
        public virtual UserProfileDataObject Save(
            UserProfileContainer theDataObjectToSave,
            LambdaExpression securityFilterExpression = null,
            List <string> includes = null,
            bool skipSecurity      = false,
            Parameters parameters  = null)
        {
            var uri     = new Uri(_serviceUrl);
            var request = WebRequest.Create(uri);

            request.ContentType = "application/x-www-form-urlencoded";
            request.Method      = "POST";
            request.Timeout     = GetRequestTimeout(parameters);

            using (var stream = request.GetRequestStream())
            {
                string objectToSaveAsString = JsonConvert.SerializeObject(theDataObjectToSave, JsonSerializerSettings);

                var byteArray = Encoding.UTF8.GetBytes("entity=" + HttpUtility.UrlEncode(objectToSaveAsString));
                stream.Write(byteArray, 0, byteArray.Length);

                if (includes != null && includes.Any())
                {
                    byteArray = Encoding.UTF8.GetBytes("&include=" + HttpUtility.UrlEncode(String.Join(",", includes)));
                    stream.Write(byteArray, 0, byteArray.Length);
                }

                // get user token for currently authenticated user if any
                var userToken = UserIdentity.UserToken;

                if (!String.IsNullOrEmpty(userToken))
                {
                    byteArray = Encoding.UTF8.GetBytes("&_user_token=" + userToken);
                    stream.Write(byteArray, 0, byteArray.Length);
                }

                // Add custom query params
                WriteQueryParams(stream);

                try
                {
                    using (var response = request.GetResponse())
                    {
                        if (response == null)
                        {
                            throw new PulpException("Unable to get the response from " + uri.ToString());
                        }

                        using (var responseStream = response.GetResponseStream())
                        {
                            if (responseStream == null)
                            {
                                throw new PulpException("Unable to get the response stream from " + uri.ToString());
                            }

                            var sr        = new StreamReader(responseStream);
                            var container = JsonConvert.DeserializeObject <UserProfileContainer>(sr.ReadToEnd(), JsonSerializerSettings);

                            if (container == null)
                            {
                                if (theDataObjectToSave.ExtractUserProfile().IsMarkedForDeletion)
                                {
                                    return(null);
                                }
                                else
                                {
                                    throw new GOServerException("No UserProfile in the response to SDK DataProvider Save(). Not expecting a null response here!");
                                }
                            }
                            else
                            {
                                container.ObjectsDataSet.EnsureInitialized();
                                container.ObjectsDataSet.ReconstructIndexes();

                                response.Close();
                                return(container.ExtractUserProfile());
                            }
                        }
                    }
                }
                catch (WebException we)
                {
                    // See if we can decode GOServerException
                    var error = GOServerException.FromWebResponse(we);

                    if (error != null)
                    {
                        throw error;
                    }

                    throw;
                }
            }
        }