В своем приложении asp.net mvc я создал следующую ссылку:
http://localhost:2689/en/Formula.mvc/351702++LYS+GRONN+5G+9%252f2++fds
Я получаю ошибку 400 (неверный запрос).
Я думаю, он блокируется на% 25 (косая черта).
Что я делаю не так?
- РЕДАКТИРОВАТЬ 3 -
Я пытался вообще ничего не кодировать, а полагаться на кодировку Url.RouteUrl () по умолчанию.
Кажется, по какой-то причине это не кодирует "/".
Если я сам сначала закодирую его, я получу код с кодировкой% 252f. Это дает мне плохую просьбу по какой-то причине ..
Почему?!
- РЕДАКТИРОВАТЬ 2 -
Я сгенерировал последнюю часть URI следующим образом:
- Возьмите id.toString
- Возьмите HttpUtility.UrlEncode (имя)
- Возьмите HttpUtility.UrlEncode (код)
- String.Format ("{0} - {1} - {2}") со значениями из предыдущих частей
- Добавить его в качестве параметра в Url.RouteUrl ()
После этого мое действие снова получает этот параметр, разделяет его на - и HttpUtility.Decode () возвращает значения.
Я делаю это так, потому что два последних параметра являются необязательными, но являются функциональными параметрами. Если они определены на предыдущем шаге, их необходимо перенести на другие страницы.
Менее абстрактно: цвет может иметь несколько имен, но если пользователь выбрал его по определенному имени, его следует сохранить на всех остальных страницах.
- РЕДАКТИРОВАТЬ 1 -
Также похоже, что HttpUtility.UrlEncode () и Url.Encode () возвращают разные результаты: S
Если я не закодирую "/", он действует как разделитель => Не повезло.
Если я закодирую его с помощью Url.Encode (), я получу% 2F => Code 400
Если я закодирую его с помощью HttpUtility.UrlEncode (), я получу% 25 => code 400
Поскольку 400 даже не пропускает его в asp.net-mvc, отладчик маршрута бесполезен: (