ASP.Net MVC 2.0: неэкранированные параметры запроса URL - PullRequest
2 голосов
/ 12 ноября 2010

У меня следующий URL:

http://localhost:8041/Reforge.aspx?name=Cyan%ECde&realmId=1

уведомление %EC в значении параметра name.

% EC = 236 = ì (igrave)

В моем методе действий:

public ActionResult Index(string name, int realmId) {...}

name [4] - это символ с кодом 65533 (0xFFFD). Что я делаю не так?

Ответы [ 4 ]

1 голос
/ 12 ноября 2010

HttpUtility.UrlDecode("%EC") дает этот символ (65533) в качестве выходного.

HttpUtility.UrlEncode("ì") производит "%c3%ac"

Как вы генерируете этот %EC?Похоже, ваша кодировка не работает, так как ASP.NET ожидает

ОБНОВЛЕНИЕ

Вы говорите, что просто вводите http://localhost:8041/Reforge.aspx?name=Cyanìde&realmId=1 в браузере и этоэто не правильно кодирует.Я бы посоветовал вам не вводить это в ваш браузер.Если вы генерируете этот URL, вам необходимо его кодировать (чтобы он отображался как <a href="http://localhost:8041/Reforge.aspx?name=Cyan%c3%acde&realmId=1">).Firefox будет показывать это с «» при наведении курсора, но будет давать закодированную версию при щелчке или копировании.

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

1 голос
/ 12 ноября 2010

Это будет зависеть от элемента глобализации в web.config:

<globalization requestEncoding="iso-8859-1" />

Или, если ваш сайт UTF-8

<globalization requestEncoding="utf-8" />

Но в этом случае URL должен выглядеть как name=Cyan%c3%acde. Вы должны всегда использовать URL-помощники для генерации URL-адресов, чтобы они правильно кодировались.

0 голосов
/ 24 апреля 2012

Я столкнулся с аналогичной проблемой с кодировкой URL (для работы необходимо кодировать как% EC) в ASP.NET и js.

Если вы установили <globalization requestEncoding="ISO-8859-1" responseEncoding="ISO-8859-1" \> в узле system.web, вы должны использовать HttpContext.Current.Server.UrlEncode для urlencode \ decode, поскольку вы используете настройки глобализации в web.config.

Перед использованием UrlEncode в текущем HttpContext Я использовал HttpUtility.UrlDecode, который не использует текущие настройки глобализации.

Работал на меня!

0 голосов
/ 12 ноября 2010

Некоторые вещи, которые я могу найти:

HttpServerUtility.UrlDecode (ваш параметр)

HttpUtility.UrlDecode (ваш параметр)

Server.UrlDecode (ваш параметр)

Кто-нибудь из них работает на вас?

...