DNN перезапись и отключение Querystring, хотя у меня есть параметр Regex

Наш веб-сайт DNN переписывает артикул нашего продукта, который является частью строки запроса при переходе со страницы фильтра продукта на страницу подробного обзора продукта.

К сожалению, для некоторых наших продуктов в артикуле используется косая черта, например BD0002 / DSDS.

Мы переходим по URL-адресу https://dnndev.me/Product-View/sku/BD0002/DSDS, но DNN отключит и перезапишет последнюю часть URL-адреса, что приведет к следующему URL-адресу: https://dnndev.me/Product-View/sku/BD0002

Я попытался добавить следующий код Regex в раздел настроек SEO DNN, чтобы игнорировать перезапись страницы, но он делает то же самое.

sku/(.*)/(.*)

Я также заметил, что в настоящее время наш веб-сайт записывает артикул без знака = для строки запроса. В настоящее время это будет / sku /, а не ? Sku =. Я обнаружил, что могу изменить это, добавив | / sku | в регулярном выражении строки запроса.

Я установил расширенный формат URL в файле web.config. Я не хочу менять его на HumanFriendly, так как это ломает наш модуль.

введите описание изображения здесь

Наша страница фильтра продуктов, которая содержит ссылки на представление продукта, использует шаблон усов с HttpUtility.UrlEncode для QueryStringSKU:

<a href='<%=DetailedPageRedirectLink%>/sku/{{QueryStringSKU}}'>More Info</a>

Затем у нас есть модуль подробного представления продукта, который прослушивает QueryString. Раньше я пытался использовать кодирование и декодирование, но DNN делала свое дело и игнорировала часть кодирования и декодирования, поэтому я написал эту сумасшедшую часть кода, которая удаляет часть URL-адреса, которая не является частью SKU.

string rawurlfromrequest = Request.RawUrl;
string checkifquerystringexist = Request.QueryString["sku"];
if(checkifquerystringexist != null)
 {
 var cleanSKU = rawurlfromrequest.Split(new[] { "sku/" }, StringSplitOptions.None)[1];
 decodeprodCode = cleanSKU.Split(new[] { "&" }, StringSplitOptions.None)[0];
 decodeprodCode = decodeprodCode.Split(new[] { "/search" }, StringSplitOptions.None)[0];
 decodeprodCode = decodeprodCode.Split(new[] { "?fbclid=" }, StringSplitOptions.None)[0];
 decodeSKU = HttpUtility.UrlDecode(decodeprodCode);
 }

if (!string.IsNullOrWhiteSpace(decodeSKU) && IsEditable == false)
{
LoadProductDetails(decodeSKU);
}

Итак, я хотел бы знать, как я могу разрешить DNN перезаписывать только первую часть URL-адреса, а не часть SKU строки запроса, если она содержит косую черту?

Я нашел эти ссылки: https://www.dnnsoftware.com/answers/disable-friendly-url-for-one-page

https://www.dnnsoftware.com/forums/threadid/542568/scope/posts/how-can-one-turn-off-friendly-urls-url-rewriting-etc-in-dnn-8


person Tig7r    schedule 18.02.2019    source источник
comment
Вам нужно избежать косой черты как %2F.   -  person VDWWD    schedule 18.02.2019
comment
@VDWWD, Спасибо, сработало. Мне пришлось использовать uri.EscapedDataString (). Я всегда хотел знать, почему DNN игнорирует кодировку при использовании Request.QueryString [sku]; URL-адрес показывает, что строка запроса закодирована, но этот метод возвращает ее незакодированной с последней частью, которая содержит обрезанную косую черту.   -  person Tig7r    schedule 19.02.2019


Ответы (1)


Мне пришлось экранировать строку запроса с помощью uri.EscapedDataString(), который преобразует / в %2F, как указано в VDWWD.

Я также обнаружил, что некоторые продукты содержат пробел в SKU, поэтому я решил использовать EscapedDataString, который преобразует пробел в %20.

Я нашел эту таблицу с различными методами кодирования в этом посте полезной: Кодирование URL с использованием C #

По какой-то причине Request.Querystring ['sku'] извлекает незакодированную строку запроса, даже если она закодирована в URL-адресе. Вот почему я использую Request.RawUrl и удаляю из него строку запроса.

person Tig7r    schedule 19.02.2019