ASP.NET MVC 2 - проблема с кодировкой запроса - PullRequest
2 голосов
/ 15 августа 2010

Hello!

Есть контроллер и действие, которое получает один параметр через GET, примерно вот так:

www.site.com / controller / action /? Query = параметр <- русское слово </p>

Проблема:

Пример 1: www.site.com/controller/action/?query=Пример <- русское слово </p>

Пример 2: www.site.com/controller/action/?query=Example

Параметр чтения:

var param = Request.QueryString["query"];

Результат 1:

  param = "������"

Данные от отладчика:

Request.RawUrl = "/controller/action/?q=%CF%F0%E8%EC%E5%F0"
QueryString = {q=%ufffd%ufffd%ufffd%ufffd%ufffd%ufffd}

Результат 2:

param = "Example"

Данные отладчика:

Request. RawUrl = "/controller/action/?q=Example"
QueryString = {q=Example}

ContentEncoding установлен в UTF-8.

Web.config:
<globalization requestEncoding="utf-8" responseEncoding="utf-8"
           fileEncoding="utf-8" />

Вопрос: Как правильно получить парам с русским словом?

Ответы [ 3 ]

2 голосов
/ 15 августа 2010

Никогда не используйте русские слова в URI (и даже не стоит пробовать).Вы должны их кодировать.

RFC 1738 : спецификация унифицированных указателей ресурсов (URL)

.. Только буквенно-цифровые символы [0-9a-zA-Z], специальные символы"$ -_. +! * '()," [не включая кавычки - ред.] и зарезервированные символы, используемые для их зарезервированных целей, могут использоваться без кодировки в URL.

Если ваши пользователи собираются войтиСами ссылки на русском - (для поиска) вы можете попробовать UrlDecode Request.Url

1 голос
/ 15 августа 2010

Вам необходимо UrlEncode значения строки запроса.

0 голосов
/ 16 августа 2010
HttpUtility.UrlDecode(Request.QueryString["q"], Encoding.Default) 

решает проблему.

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