2015-09-10 4 views
0

Это странная (для меня в любом случае) проблема с строкой запроса.asp.net mvc querystring parsing заменяет + пробелом

Я использую установочный инструмент, который имеет проверку серийного номера в Интернете. В основном, установка передает электронную почту пользователя и серийный номер на веб-страницу (или метод контроллера для MVC), и она принимает аргументы строки запроса и делает магию для проверки установки.

Одним из аргументов является адрес электронной почты, переданный в строке запроса.

У меня недавно появился пользователь, который использовал адреса электронной почты «+» для покупки подписки. Все работало хорошо, пока он не пошел на установку продукта и должен был пройти экран проверки.

После выполнения некоторого копания я обнаружил, что вместо того, чтобы получать '[email protected]'

Код проверки принимает 'джо [email protected]'

Of Конечно, пространство разрушает попытку проверки, так как его адрес электронной почты теперь ошибочен.

Я говорил с компанией-инсталлятором (Advanced Installer, лучший инструмент установки на планете), и они заявляют (и я считаю), что письмо отправлено правильно.

Так вот, что оставляет меня в том, как я могу получить парсер sser.net mvc querystring в правильном направлении для этого конкретного аргумента и передать строку с «+» методу contoller?

Это asp.net mvc 5, если это имеет значение.

Спасибо за любую помощь, которую вы можете сэкономить.

UPDATE

Проблема с представляемым, а не прием. знак плюса заканчивается незакодированным, поэтому он преобразуется в пробел = когда он обрабатывается парсером строки запроса.

Так что я ищу способ настроить синтаксический анализатор строки запроса для этого конкретного URL-адреса (и только этого URL-адреса).

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

Вы можете настроить примерно все остальное в asp.net mvc, поэтому мне было интересно, есть ли способ сделать строку запроса pasring некорректным способом.

+0

Вы пробовали кодировать параметры строки запроса перед их отправкой? – Diego

+1

Дублировано http://stackoverflow.com/questions/13445121/asp-net-query-string-encoding-and-decoding? – Diego

+1

Если это инструмент, который передает символ + unencoded, то это инструмент, который неисправен. Контроллер делает правильную вещь. –

ответ

0

Похоже, я вам придется пойти с моим взломанным решением обменивания пространства для знака плюса в этом конкретном параметре строки запроса. Не идеальное решение в моем образе мышления, но это сделает трюк.

0

Предполагая, что вы вызываете URL из JavaScript, вместо того, чтобы сделать это:

url += "?email=" + email; 

закодировать значение, как это:

url += "?email=" + encodeURIComponent(email); 

Если вы вызываете URL с сервера, то:

string encodedEmail = Server.UrlEncode(email); 

UPDATE

Если вы не можете изменить URL, где становится называется, то у вас нет другого выбора, кроме:

HttpUtility.UrlEncode(Request.QueryString["email"]); 

или:

email = email.Replace(' ', '+'); 
+0

. Вызов URL-адреса происходит из клиентского инструмента (установщика приложений MSI), поэтому я не могу контролировать, это разбор, обрабатываемый asp.net mvc, что мне нужно предотвратить преобразование + в пробел, по крайней мере, только для этого URL-адреса. – WyomingDoug

+0

В этом случае я не уверен, есть ли у вас другой вариант, чем для выполнения HttpUtility.UrlEncode (Request.QueryString ["email"]); 'или' email = email.Replace ('', '+'); ' – Diego

+0

Замена в конечном итоге является решением, хотя мне это не нравится. Спасибо за помощь. – WyomingDoug

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