Синтаксический анализатор C# ASP.NET QueryString

Вам, вероятно, нужно сначала сохранить файл на диск. Команда loaddata ожидает, что аргумент является путем к файлу фиксации на диске.

Вы можете сохранить загруженный файл во временный файл и затем вызвать loaddata для него.

Например:

import tempfile
from django.core.management import call_command

@login_required
@product_1_activation
def company_upload(request):
    if request.method == 'POST':
        new_company = request.FILES['myfile']

        with tempfile.NamedTemporaryFile(dir='/tmp') as temp:
            for chunk in new_company.chunks():
                temp.write(chunk)
            call_command('loaddata', '/tmp/{}'.format(temp.name), verbosity=0)

    return render(request, 'company/import.html')

7
задан Andre Gallo 22 February 2009 в 12:45
поделиться

5 ответов

Учитывая, что Вы только обрабатываете три различных типов, я предложил бы три различных метода вместо этого - общие методы являются лучшими, когда они работают хорошо с каждым аргументом типа, который разрешен ограничениями типа.

Кроме того, я настоятельно рекомендовал бы это для int и DateTime Вы указываете культуру для использования - она не должна действительно зависеть от культуры, в которой сервер, оказывается, находится. (Если у Вас есть код для предположения культуры пользователя, Вы могли бы использовать это вместо этого.) Наконец, я также предложил бы поддерживать хорошо указанный набор DateTime форматы, а не только безотносительно TryParse поддержки по умолчанию. (Я в значительной степени всегда использую ParseExact/TryParseExact вместо Parse/TryParse.)

Обратите внимание, что строковая версия ничего не должна действительно делать, учитывая, что value уже строка (хотя Ваш текущий код преобразовывает "" в null, который может или не может быть тем, что Вы хотите).

5
ответ дан 6 December 2019 в 04:53
поделиться

В моем приложении я использовал следующую функцию:-

public static class WebUtil
{
    public static T GetValue<T>(string key, StateBag stateBag, T defaultValue)
    {
        object o = stateBag[key];

        return o == null ? defaultValue : (T)o;
    }
}

Необходимое значение по умолчанию возвращается, если параметр не был предоставлен, тип выведен из defaultValue, и исключения кастинга повышены по мере необходимости.

Использование следующим образом:-

var foo = WebUtil.GetValue("foo", ViewState, default(int?));
2
ответ дан 6 December 2019 в 04:53
поделиться

Мне кажется, что Вы делаете, много unecesary вводит convertions. tempValue переменные arere свинцовый из типа Вы пытаетесь возвратиться. Аналогично в строковом случае значение уже является строкой, поэтому просто возвращают его вместо этого.

1
ответ дан 6 December 2019 в 04:53
поделиться

Простой способ синтаксического анализа (если вы не хотите выполнять преобразование типов) -

 HttpUtility.ParseQueryString(queryString);

Вы можете извлечь строку запроса из URL-адреса с помощью

 new Uri(url).Query
34
ответ дан 6 December 2019 в 04:53
поделиться

I've written the following method to parse the QueryString to strongly typed values:

public static bool TryGetValue<T>(string key, out T value, IFormatProvider provider)
{
    string queryStringValue = HttpContext.Current.Request.QueryString[key];

    if (queryStringValue != null)
    {
        // Value is found, try to change the type
        try
        {
            value = (T)Convert.ChangeType(queryStringValue, typeof(T), provider);
            return true;
        }
        catch
        {
            // Type could not be changed
        }
    }

    // Value is not found, return default
    value = default(T);
    return false;
}

Usage example:

int productId = 0;
bool success = TryGetValue<int>("ProductId", out productId, CultureInfo.CurrentCulture);

For a querystring of ?productId=5 the bool would be true and int productId would equal 5.

For a querystring of ?productId=hello the bool would be false and int productId would equal 0.

For a querystring of ?noProductId=notIncluded the bool would be false and int productId would equal 0.

3
ответ дан 6 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

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