ASP.NET MVC解析URL查询部分

时间:2010-11-12 20:35:33

标签: asp.net-mvc urldecode

我想要将某个网址的?a=5&b=8部分转换为字典{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

请注意,ISO-8859-1(Latin-1)编码用于非ASCII字符。

以下是相关问题:ASP.NET MVC does not understand mixed url encoding (UTF-8/Latin-1)

2 个答案:

答案 0 :(得分:2)

Request.QueryString是一个NameValueCollection,就像一个字典。

它可以包含同一个键​​的多个值。

如果“?a = 5& b = 8”不是来自查询字符串,您可以使用 HttpUtility.ParseQueryString 方法获取NameValueCollection

如果你想要一本真正的字典:

var d = new Dictionary<String,Object>();
this.Request.QueryString.CopyTo(d);

答案 1 :(得分:1)

也许是自定义模型绑定器来处理字典?它似乎依赖于查询字符串,虽然完全有效,但却违背了框架的精神。它也可能使您的行动测试更加困难。

我的第一个想法是,这已经由默认的模型绑定设备处理,但似乎并非如此。那就是说,我没有尝试过,但这是我开始的地方:

An Intuitive Dictionary Model Binder for ASPnet MVC