Что не так с моей URL-кодировкой? - PullRequest
4 голосов
/ 20 марта 2009

В своем приложении asp.net mvc я создал следующую ссылку:

http://localhost:2689/en/Formula.mvc/351702++LYS+GRONN+5G+9%252f2++fds  

Я получаю ошибку 400 (неверный запрос).

Я думаю, он блокируется на% 25 (косая черта).
Что я делаю не так?

- РЕДАКТИРОВАТЬ 3 -
Я пытался вообще ничего не кодировать, а полагаться на кодировку Url.RouteUrl () по умолчанию.
Кажется, по какой-то причине это не кодирует "/".
Если я сам сначала закодирую его, я получу код с кодировкой% 252f. Это дает мне плохую просьбу по какой-то причине .. Почему?!

- РЕДАКТИРОВАТЬ 2 -
Я сгенерировал последнюю часть URI следующим образом:

  1. Возьмите id.toString
  2. Возьмите HttpUtility.UrlEncode (имя)
  3. Возьмите HttpUtility.UrlEncode (код)
  4. String.Format ("{0} - {1} - {2}") со значениями из предыдущих частей
  5. Добавить его в качестве параметра в Url.RouteUrl ()

После этого мое действие снова получает этот параметр, разделяет его на - и HttpUtility.Decode () возвращает значения.

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

- РЕДАКТИРОВАТЬ 1 -
Также похоже, что HttpUtility.UrlEncode () и Url.Encode () возвращают разные результаты: S

Если я не закодирую "/", он действует как разделитель => Не повезло. Если я закодирую его с помощью Url.Encode (), я получу% 2F => Code 400 Если я закодирую его с помощью HttpUtility.UrlEncode (), я получу% 25 => code 400

Поскольку 400 даже не пропускает его в asp.net-mvc, отладчик маршрута бесполезен: (

Ответы [ 6 ]

3 голосов
/ 21 марта 2009

Я был там пару дней назад. Если вы можете принять нечитаемые значения маршрута в URL, попробуйте это: косая черта в URL-адресе

2 голосов
/ 20 марта 2009

%25 фактически кодируется как «%», поэтому %252f кодируется как «% 2f».

%2f (закодированный "/") недопустим в URL, если вы явно не разрешите это в конфигурации веб-сервера.

0 голосов
/ 20 марта 2009

W3Schools работает отлично: http://www.w3schools.com/TAGS/html_form_submit.asp?text=hello/world

Вот ссылка на кодировку URL: http://www.w3schools.com/TAGS/ref_urlencode.asp

0 голосов
/ 20 марта 2009

Нельзя использовать косую черту в качестве значения в URL. Вот хороший пост о создании браузера и SEO-дружественных URL => http://www.dominicpettifer.co.uk/displayBlog.aspx?id=34

[Изменить] Всякий раз, когда вы создаете маршрут, вы связываете его с шаблоном URL-адреса (шаблон по умолчанию: {controller} / {action} / {id}). И в этом шаблоне URL вы должны использовать косую черту для разделения различных токенов. Надеюсь, это поможет

0 голосов
/ 20 марта 2009

Я не слишком много смотрел на кодировку - но учтите, что если это должно быть где-то хранилось (или каким-то образом действовало), тогда POST был бы более подходящим. Если текст справа фактически представляет данные с идентификатором 351702 (тщеславный URL, очень похожий на /665354/whats-wrong-with-my-url-encoding), то вам следует гуманизировать текст. Так же, как пространства были удалены из выше. Также обычно это отдельный маршрут в маршруте, который просто отбрасывается.

Как правило, URL MVC должны быть понятными.

0 голосов
/ 20 марта 2009

Запускали ли вы отладчик маршрутизации: http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...