gZip сжатие / декомпрессия в web api [duplicate]

Не зная width / height элемента position1, все равно можно выровнять его следующим образом:

ПРИМЕР ЗДЕСЬ

.child {
    position: absolute;
    top: 50%;  /* position the top  edge of the element at the middle of the parent */
    left: 50%; /* position the left edge of the element at the middle of the parent */

    transform: translate(-50%, -50%); /* This is a shorthand of
                                         translateX(-50%) and translateY(-50%) */
}

Стоит отметить, что CSS Transform поддерживается в IE9 и выше . (Префикс поставщика опущен для краткости)


Объяснение

Добавление top / left в 50% перемещает край верхнего / левого края элемента в середину родительского элемента, а функция translate() с (отрицательным) значением из -50% перемещает элемент на половину его размера. Следовательно, элемент будет располагаться посередине.

Это связано с тем, что процентное значение в свойствах top / left относительно высота / ширина родительского элемента (который создает содержащий блок).

Хотя процентное значение в функции translate() transform относительно ширина / высота самого элемента (Фактически это относится к размеру ограничивающей рамки ) .

Для однонаправленного выравнивания перейдите к translateX(-50%) или translateY(-50%).


1. Элемент с position, отличный от static. То есть relative, absolute, fixed.

51
задан Corey 8 January 2014 в 10:39
поделиться

2 ответа

Просто создайте экземпляр HttpClient следующим образом:

HttpClientHandler handler = new HttpClientHandler()
{
    AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};

using (var client = new HttpClient(handler))
{
    // your code
}
133
ответ дан NickG 21 August 2018 в 17:18
поделиться
  • 1
    Если я использую эту структуру, как мне получить содержимое моего ответа от httpClient? Я супер новичок в c #, и я не думаю, что получаю его. – FoxDeploy 9 July 2017 в 05:40
  • 2
    @FoxDeploy не требуется никаких изменений, необходимых для получения кода, когда вы используете это решение. См. Здесь для справки: stackoverflow.com/questions/26597665/… – DIG 10 July 2017 в 17:41
  • 3
    даже если это старый пост, этот ответ просто решил мою проблему в .netcore, переместившись с 1.1 на 2.0, кажется, что клиент автоматически выполнял декомпрессию, поэтому мне пришлось добавить этот код в 2.0, чтобы он работал ... Спасибо ! – Sebastian Castaldi 3 November 2017 в 19:31
  • 4
    Просто чтобы поиграть на @SebastianCastaldi, но .net core 1.1 установил AutoDecompression правильно, но в .net core 2.0 он установлен в NONE. Это заняло у меня слишком много времени, чтобы понять ... – KallDrexx 22 March 2018 в 18:23

Хорошо, поэтому я в конечном итоге решил свою проблему. Если есть лучшие способы, дайте мне знать: -)

        public DataSet getData(string strFoo)
    {
        string url = "foo";

        HttpClient client = new HttpClient();
        HttpResponseMessage response;   
        DataSet dsTable = new DataSet();
        try
        {
               //Gets the headers that should be sent with each request
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
              //Returned JSON
            response = client.GetAsync(url).Result;
              //converts JSON to string
            string responseJSONContent = response.Content.ReadAsStringAsync().Result;
              //deserializes string to list
            var jsonList = DeSerializeJsonString(responseJSONContent);
              //converts list to dataset. Bad name I know.
            dsTable = Foo_ConnectAPI.ExtentsionHelpers.ToDataSet<RootObject>(jsonList);
              //Returns the dataset                
            return dsTable;
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message);
            return null;
        }
    }

       //deserializes the string to a list. Utilizes JSON.net. RootObject is a class that contains the get and set for the JSON elements

    public List<RootObject> DeSerializeJsonString(string jsonString)
    {
          //Initialized the List
        List<RootObject> list = new List<RootObject>();
          //json.net deserializes string
        list = (List<RootObject>)JsonConvert.DeserializeObject<List<RootObject>>(jsonString);

        return list;
    }

RootObject содержит набор get, который получит значения JSON.

public class RootObject
{  
      //These string will be set to the elements within the JSON. Each one is directly mapped to the JSON elements.
      //This only takes into account a JSON that doesn't contain nested arrays
    public string EntityID { get; set; }

    public string Address1 { get; set; }

    public string Address2 { get; set; }

    public string Address3 { get; set; }

}

Самый простой способ для создания вышеуказанных классов используется json2charp , который будет соответствующим образом отформатировать его, а также предоставить правильные типы данных.

Ниже приведен другой ответ в Stackoverflow снова он не учитывает вложенные JSON.

    internal static class ExtentsionHelpers
{
    public static DataSet ToDataSet<T>(this List<RootObject> list)
    {
        try
        {
            Type elementType = typeof(RootObject);
            DataSet ds = new DataSet();
            DataTable t = new DataTable();
            ds.Tables.Add(t);

            try
            {
                //add a column to table for each public property on T
                foreach (var propInfo in elementType.GetProperties())
                {
                    try
                    {
                        Type ColType = Nullable.GetUnderlyingType(propInfo.PropertyType) ?? propInfo.PropertyType;

                            t.Columns.Add(propInfo.Name, ColType);

                    }
                    catch (Exception ex)
                    {
                        System.Windows.Forms.MessageBox.Show(ex.Message);
                    }

                }
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }

            try
            {
                //go through each property on T and add each value to the table
                foreach (RootObject item in list)
                {
                    DataRow row = t.NewRow();

                    foreach (var propInfo in elementType.GetProperties())
                    {
                        row[propInfo.Name] = propInfo.GetValue(item, null) ?? DBNull.Value;
                    }

                    t.Rows.Add(row);
                }
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }

            insert.insertCategories(t);
            return ds.
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message);

            return null;
        }
    }
};

Затем, наконец, чтобы вставить вышеуказанный набор данных в таблицу со столбцами, которые были сопоставлены с JSON, я использовал объемную копию SQL и следующий класс

public class insert
{ 
    public static string insertCategories(DataTable table)
    {     
        SqlConnection objConnection = new SqlConnection();
          //As specified in the App.config/web.config file
        objConnection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["foo"].ToString();

        try
        {                                 
            objConnection.Open();
            var bulkCopy = new SqlBulkCopy(objConnection.ConnectionString);

            bulkCopy.DestinationTableName = "dbo.foo";
            bulkCopy.BulkCopyTimeout = 600;
            bulkCopy.WriteToServer(table);

            return "";
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message);
            return "";
        }
        finally
        {
            objConnection.Close();
        }         
    }
};

Таким образом, вышеизложенное позволяет вставить JSON из webAPI в базу данных. Это то, что я получаю, чтобы работать. Но отнюдь не ожидаю, что это будет идеально. Если у вас есть какие-либо улучшения, пожалуйста, обновите их соответствующим образом.

0
ответ дан Community 21 August 2018 в 17:18
поделиться
  • 1
    Вы должны создать свой HttpClient и ваш HttpResponse внутри оператора using() каждый, чтобы обеспечить правильное, своевременное удаление и закрытие базовых потоков. – Ian Mercer 30 October 2014 в 01:10
Другие вопросы по тегам:

Похожие вопросы: