ASP.NET MVC разбирает часть запроса URL - PullRequest
1 голос
/ 12 ноября 2010

Я хочу что-то, чтобы превратить ?a=5&b=8 часть URL в словарь {a: 5, b: 8}.

Есть ли такой метод в .net или я сам по себе?

Мне нужно проанализировать часть запроса, чтобы я мог реализовать свое собственное декодирование URL. Проблема заключается в том, что Firefox использует другую кодировку (UTF8 или ISO-8859-1) в зависимости от используемого алфавита.

Пример:

Firefox кодируется следующим образом:

-                                          v   v
http://localhost:8041/Reforge.aspx?name=ArcânisГ 
Firefox turns into  
http://localhost:8041/Reforge.aspx?name=Arc%C3%A2nis%D0%93`  

Обратите внимание, что кодировка UTF8 используется для обоих символов, отличных от ASCII.

-                                          v
http://localhost:8041/Reforge.aspx?name=Arcâ
Firefox turns into
http://localhost:8041/Reforge.aspx?name=Arc%E2

Обратите внимание, что для символа, не входящего в ASCII, используется кодировка ISO-8859-1 (Latin-1).

Вот связанный вопрос: ASP.NET MVC не понимает кодирование смешанных URL (UTF-8 / Latin-1)

Ответы [ 2 ]

2 голосов
/ 14 ноября 2010

Request.QueryString - это коллекция NameValueCollection, похожая на словарь.

Может содержать несколько значений для одного и того же ключа.

Если "? A = 5 & b = 8" не взято из строки запросаВы можете использовать метод HttpUtility.ParseQueryString , чтобы получить коллекцию NameValueCollection

Если вы хотите настоящий словарь:

var d = new Dictionary<String,Object>();
this.Request.QueryString.CopyTo(d);
1 голос
/ 14 ноября 2010

Может быть, пользовательское связующее для работы со словарями? Кажется, что полагаться на строку запроса, хотя и совершенно правильно, противоречит духу фреймворка. Это также может сделать тестирование вашего действия немного сложнее.

Моей первой мыслью было, что это уже было обработано средствами по умолчанию для связующего, но это не так. Тем не менее, я не пробовал, но вот с чего бы начать:

Подсказка для модели интуитивного словаря для ASPnet MVC

...