Необработанный, необработанный URL с маршрутизацией ASP.NET - PullRequest
0 голосов
/ 13 июня 2011

Я использую ASP.NET UrlRoutingModule напрямую ( не через MVC ) для сопоставления определенных маршрутов с их обработчиками:

RouteTable.Routes.Add(new Route("products/{name}", handler));

Затем, во время запроса, я получаюзначения для каждого маршрута:

RouteData routeData = HttpContext.Current.Request.RequestContext.RouteData;
routeData.Values.TryGetValue("name", out value);

Пока все отлично, я получаю правильные значения для каждого маршрута.Моя проблема заключается в кодировании: я хочу получить raw значение данных маршрута.Пример: для указанного выше маршрута, если запрошенный URL-адрес http://example.com/products/word%2Dword, полученное "имя" будет " word-word ".Однако мне нужно точное значение " word% 2Dword ".

Я знаю, что с ASP.NET я могу получить необработанный необработанный URL-адрес с помощью Request.ServerVariables ["HTTP_URL"], нок сожалению, я не могу использовать это здесь.

Любая помощь будет оценена.

Спасибо

РЕДАКТИРОВАТЬ

Моя конкретная проблема заключается в том, что я хотел бы получить большеПродукты в одном запросе, используя их названия.У меня есть, например, следующие названия продуктов: « студент, ученик » и « больной, больной » ( их имя содержит запятую ).Я также использую запятую для разделения имен в запросе.

Я обрабатываю кодировку на стороне клиента, поэтому запрос GET выглядит следующим образом: http://example.com/products/student%2Cpupil,sick%2Cill ( Я кодирую каждое имя отдельно, но не кодирую разделитель ).

На стороне сервера параметр «имя» будет автоматически декодирован ASP.NET, и в результате получится: « студент, ученик, больной, больной », так что теперь я неЯ не знаю, какой разделитель.Request.ServerVariables ["HTTP_URL"] возвращает URL так, как я хочу (" products / student% 2Cpupil, sick% 2Cill "), поэтому я предполагаю, что должен быть способ получить необработанное значение какданные маршрута.

1 Ответ

0 голосов
/ 13 июня 2011

«Сырое значение», которое вы видите, на самом деле не является исходным значением, это то, что было закодировано, чтобы сделать URL безопасным для протокола HTTP.

http://example.com/products/word%2Dword Например, началоськак http://example.com/products/word-word и превращается обратно в слово-слово при выходе из транспортного уровня HTTP.

Если вы передадите его через Server.URLEncode, вы получите то же закодированное значение (% 2Dвместо -) - но если вы не можете использовать переменные сервера, у вас будет доступ к объекту сервера?

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