2016-07-31 3 views
0

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

, например, моя полученный base64 строка выглядит следующим образом:

aHR0cDovL2xvY2FsaG9zdDoxMzUwL2hvdGVscy9nMy8xMzk1LTA1LTEwLzEvOTI3MjIyZmY 
but it turn to be like this, when is passed to controller: 
ahr0cdovl2xvy2fsag9zddoxmzuwl2hvdgvscy9nmy8xmzk1lta1ltewlzevoti3mjiyzmy 

который не может быть прочитан ... причина причины проблемы при декодировании.

+0

Является ли это полем значения формы, которое вы пытаетесь закодировать здесь? Если да, зачем включать его в Url, а не POST? – sachin

+0

@sachin заставляет читателя не публиковать сообщения, он только получит (или, наконец, весь образец, предоставленный с get) – deadManN

+0

'наш менеджер SEO настроит приложение, чтобы передать строчный URL-адрес, и он говорит, что он не изменит конфигурацию '- заставить ИТ-ребята настроить свой доступ в Интернет, чтобы он делал URL-адреса Youtube в нижнем регистре. – GSerg

ответ

1

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

Если согласование, которое ваш менеджер настаивает на том, что параметры строки входящего или исходящего запроса неправильно установлены, вы должны сообщить ему, что он нарушает спецификацию URI, в частности раздел query string. Разумеется, в конечном счете, это зависит от ваших собственных внутренних решений компании, независимо от того, хотите ли вы иметь только нижний регистр в своих внутренних URI, но вы не должны предполагать, что другие приложения, обрабатывающие URI, будут работать следующим образом.

Как указано выше, если вы можете сделать этот запрос POST (вместо GET, как я предполагаю, это сейчас), и при условии, что ваш менеджер не будет обмазывать их при отправке их:/Вы можете отправьте эти данные через POST.

В качестве альтернативы вы можете использовать Base32 вместо этого, чтобы использовать это, он полагается только на символы верхнего регистра, но вы можете просто преобразовать полученное значение в верхний регистр, получив его до декодирования строки (теперь Base32). Это довольно смешное решение, хотя ...

Только для того, чтобы быть понятным: «lol» будет кодировать в Base32 на «NRXWY ===», который затем будет ниже обрезанным до «nrxwy ===», который тогда можно было бы назад до «NRXWY ===» перед декодированием.

Эти два NuGet пакеты, которые делают base32 кодирование:

  1. Base32 в соответствии с RFC4648 here и автор утверждает, что она протестирована и работает правильно.

  2. Другой пакет, который выглядит привлекательным, потому что он поддерживает zBase32 here, преимущество zBase32 в том, что он уже использует строчные буквы, поэтому вам не придется беспокоиться об изменении корпуса. Привратник/автор включил инструкции о том, как получить кодировку zBase32

Оба из них (Base32 и zBase32) использовать подмножество символов Base64, поэтому они оба прекрасно работают с URIs, все charcaters используемые в URI (содержимое utf-8 не имеет значения, поскольку вы просто кодируете байты, так что вы будете получать те же самые байты при декодировании из Base32)

+0

хорошо, я сообщил ему, но он не имеет никакого эффекта, я посмотрел, как-то закодировал его, чтобы иметь возможность вернуть верхний регистр назад, с допустимым знаком, который не является частью самого base64. Кстати, какой base32 использует? нужно ли больше кодировки символов? например base64 требуется только +,/и =. во-вторых, мы являемся пользователями системы на основе символов utf-8, поддерживает ли base32 этот вопрос? в-третьих, base32 реализована на языке C#? – deadManN

+0

Я обновил ответ, но в короткой версии он не использует меньше символов кодирования, да, он по-прежнему поддерживает utf-8, и да, он реализован на C#, но вам придется захватить библиотеку, возможно, из NuGet: P – starlight54

+0

Это сработало, я использовал вторую версию, так как она имела чувствительную к регистру коррекцию. – deadManN