URL Rewriter Managed Fusion удаляет строку QueryString - PullRequest
2 голосов
/ 14 июня 2011

Я использую Managed Fusion URL Rewriter, пока что это было круто. Теперь мне просто нужно убедиться, что строка запроса передается в URL с прокси-сайта. Мне нужно передавать CODE = 777 на каждый звонок, поэтому у меня есть код ниже:

RewriteRule ^(.*)  http://www.somewebsite.com/$1?CODE=777[P, QSA,I,L]

Однако мне нужно убрать строку запроса перед началом работы. Поэтому я использовал код ниже:

RewriteCond %{QUERY_STRING}  ^CODE=([0-9]+)+$
RewriteRule ^(.*) http://www.somewebsite.com/$1? [P, QSA]
RewriteRule ^(.*)  http://www.somewebsite.com/$1?CODE=777[P, QSA,I,L]

Но происходит сбой, когда я перенаправляю с дополнительной строкой запроса, такой как ниже

http://proxyserver.com?othercode=something

Есть идеи, как удалить конкретную строку запроса, не удаляя все параметры строки запроса?

1 Ответ

0 голосов
/ 17 июня 2011

Я скачал исходный код из Managed Fusion и добавил проект в свое решение.

Я искал и обнаружил этот фрагмент кода ниже, который добавляет QueryString.Я обновил код, добавив новый метод для удаления КОДА строки запроса и прикрепления ФИКСИРОВАННОГО.

Я также добавил параметр для управления ФИКСИРОВАННЫМ значением, назначенным КОДУ.

  private Uri AppendQueryString(Uri substituedUrl, Uri existingUrl)
    {
        string append = existingUrl.Query.TrimStart('?');

        if (!String.IsNullOrEmpty(append))
        {
            UriBuilder builder = new UriBuilder(substituedUrl);

            if (String.IsNullOrEmpty(builder.Query) || builder.Query == "?")
                builder.Query = append;
            else
                builder.Query = builder.Query.TrimStart('?') + "&" + append;

            return AppendFixedQueryString(builder.Uri, existingUrl);
        }

        return AppendFixedQueryString(substituedUrl, existingUrl);
    }

ДОБАВЛЕН НОВЫЙ МЕТОД

    private Uri AppendFixedQueryString(Uri substituedUrl, Uri existingUrl)
    {
        string append = string.Format("CODE={0}", Settings.Default.CODE);


        if (!String.IsNullOrEmpty(append))
        {
            UriBuilder builder = new UriBuilder(substituedUrl);
            builder.Query = Regex.Replace(builder.Query, @"CODE=([0-9]+)", String.Empty);
            if (String.IsNullOrEmpty(builder.Query) || builder.Query == "?")
                builder.Query = append;
            else
                builder.Query = builder.Query.TrimStart('?').Trim("&".ToCharArray()) + "&" + append;
            return builder.Uri;
        }
        return substituedUrl;
    }

С этой модификацией.даже если пользователь явно наберет CODE = 123 в URL, он будет просто проигнорирован и ему будет присвоено фиксированное значение CODE

...