Кодирование URL ASP.NET

Я не знаю ни одного... мои программы Java являются всегда медленными.:-) Я действительно никогда не замечал программы C#, являющиеся особенно медленным, все же.

7
задан Kelly Gendron 17 August 2009 в 16:12
поделиться

2 ответа

Вам следует подумать о наличии таблицы вне таблицы категорий / отделов, которая имеет уникальный URL-адрес для каждой категории. Затем вы можете использовать специальную процедуру для генерации URL-адресов. Это может быть скалярная функция SQL или функция CLR, но одна из вещей, которые она будет делать, - это нормализовать URL-адрес для Интернета. Вы можете преобразовать «Напитки и батончики» в «Напитки и батончики», а «Кондитерские изделия / украшение» - в «Украшение кондитерских изделий». В основном процедура должна заменить все недопустимые символы URL-адреса HTTP чем-то другим. Пример:

public static class URL
{
    static readonly Regex feet = new Regex(@"([0-9]\s?)'([^'])", RegexOptions.Compiled);
    static readonly Regex inch1 = new Regex(@"([0-9]\s?)''", RegexOptions.Compiled);
    static readonly Regex inch2 = new Regex(@"([0-9]\s?)""", RegexOptions.Compiled);
    static readonly Regex num = new Regex(@"#([0-9]+)", RegexOptions.Compiled);
    static readonly Regex dollar = new Regex(@"[$]([0-9]+)", RegexOptions.Compiled);
    static readonly Regex percent = new Regex(@"([0-9]+)%", RegexOptions.Compiled);
    static readonly Regex sep = new Regex(@"[\s_/\\+:.]", RegexOptions.Compiled);
    static readonly Regex empty = new Regex(@"[^-A-Za-z0-9]", RegexOptions.Compiled);
    static readonly Regex extra = new Regex(@"[-]+", RegexOptions.Compiled);

    public static string PrepareURL(string str)
    {
        str = str.Trim().ToLower();
        str = str.Replace("&", "and");

        str = feet.Replace(str, "$1-ft-");
        str = inch1.Replace(str, "$1-in-");
        str = inch2.Replace(str, "$1-in-");
        str = num.Replace(str, "num-$1");

        str = dollar.Replace(str, "$1-dollar-");
        str = percent.Replace(str, "$1-percent-");

        str = sep.Replace(str, "-");

        str = empty.Replace(str, string.Empty);
        str = extra.Replace(str, "-");

        str = str.Trim('-');
        return str;
    }
}

Вы можете сделать это функцией улучшения SQL или запустить создание URL как отдельный процесс. Затем, чтобы реализовать сопоставление, вы должны сопоставить весь URL-адрес напрямую с идентификатором категории. Этот подход лучше в долгосрочной перспективе по нескольким причинам. Во-первых, вы не всегда генерируете URL-адреса, вы делаете это один раз, и они остаются статичными, вам не нужно беспокоиться об изменении процедуры, и тогда робот GoogleBot не сможет найти старые URL-адреса. Кроме того, если вы столкнетесь с конфликтом, вы можете заметить возможное дублирование имени категории, потому что столкновение будет отличаться только специальными символами. Наконец, вы всегда можете просматривать свои URL-адреса из базы данных без необходимости запускать функцию сопоставления.

5
ответ дан 7 December 2019 в 05:26
поделиться

У меня есть перезапись URL-адреса, которую я реализовал в файле global.asax в запросе с аутентификацией на начало, поскольку у меня есть некоторая безопасность. Здесь я беру необработанный URL-адрес, а затем ищу в базе данных. затем это перезаписывает путь к странице aspx, и все параметры передаются через строку запроса. Кодирование не требуется.

Однако, если вы используете URL-адрес для фактического изменения данных, я вижу, что у вас возникнут огромные проблемы, поскольку вы эффективно используете http GET для изменения базы данных. Обычно это считается плохой идеей, а не тем, чем я занимаюсь.

Я использую только почтовые запросы для любых манипуляций с базой данных. Это сохраняет URL-адрес чистым, так как все данные находятся в форме страницы.

Единственная проблема, с которой я столкнулся, заключалась в том, чтобы установить правильный URL-адрес для page.form.action, который в большинстве случаев является необработанным URL-адресом.

Если проблема связана с именами категорий, возможно, вам следует ограничить имена только буквенно-цифровыми символами и заменить пробелы на «-». IIS будет шататься с точками "." поскольку он ищет имена файлов.

PS IIS не понимает тильду «~», это то, что понимает компилятор. поэтому, если вы используете его в теге привязки, он не будет работать должным образом, и вам следует использовать корень приложения вместо тильды.

Изменить:

Хорошо, похоже, проблема с IIS, имеющая проблемы с определенными символами, такими как как . / а также &. Даже если вы выполните urlencode, эти IIS все равно будут пытаться реализовать свои собственные значения. Таким образом, рассмотрите возможность их удаления:

Beverage & bar становится BeverageBar

Кондитерские изделия / украшения становятся PastryDecorating.

Это сохранит ваши URL-адреса в чистоте, но означает дополнительный столбец в базе данных, чтобы вы могли проверить URL-адрес против это сокращенное название категории.

2
ответ дан 7 December 2019 в 05:26
поделиться
Другие вопросы по тегам:

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