2015-10-22 5 views
2

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

public static Security.Hashids HashOps = new Security.Hashids("Sl212", 5); 

Security это пространство имен моего проекта, внутри которого я скопировал Hashids.cs файл. Кодировка работает правильно, но декодирование бросает исключение IndexOutOfRangeException. Это, как я декодирование:

int fileID=HashOps.Decode(FileID)[0]; 

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

Скажите, пожалуйста, что делать? Пробыв в течение 12 часов, мой разум застрял в тупике.

UPDATE

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

Hashids HashOps = new Hashids(); 
string hash = HashOps.Encode(212); 
Console.WriteLine("Encoded: " + hash); 
Console.WriteLine("Decoded: " + HashOps.Decode(hash)[0]); 
+3

Просьба представить [минимальный, полный, проверяемый пример] (http://stackoverflow.com/help/mcve): просто создайте минимальный пример: (1) создает экземпляр Hashids, (2) кодирует некоторое значение (3) декодирует его и выдает исключение, как показано в вашем вопросе. – Heinzi

+0

Почему вы используете Hashids для скрытия идентификаторов базы данных в URL-адресе? –

+0

@AsadSaeeduddin Я предпочел это, потому что он не имеет коллизий и имеет метод декодирования, чтобы вернуть идентификатор. Если у вас есть другие предложения, пожалуйста, сообщите. –

ответ

3

Наконец, с помощью @Heinzi я был в состоянии обнаружить, что на самом деле происходит. Проблема заключалась в системе обнаружения URL-адресов моего веб-приложения. Что определяет URL-адрес и загружает контент в DIV. Эта система делала полный URL-адрес более низким. Следовательно, изменение хэша, содержащего заглавную букву. Я просто использовал фактический URL вместо того, чтобы понижать его при обнаружении идентификаторов.

Смежные вопросы