ASP.NET MVC解析URL查询部分
问题描述:
我想将某个URL的?a=5&b=8
部分变成字典{a:5,b:8}。ASP.NET MVC解析URL查询部分
在.net中是否有这样的方法或我自己?
我需要解析查询部分,以便我可以实现自己的URL解码。 问题是Firefox根据使用的字母表使用不同的编码(UTF8或ISO-8859-1)。
实施例:
火狐编码如下:
- 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)
答
的Request.QueryString是一个NameValueCollection中是像一本字典。
它可以包含同一个键的多个值。
如果不是来自查询字符串,你可以使用HttpUtility.ParseQueryString方法获取的NameValueCollection
如果你想有一个真正的字典 “A = 5 & B = 8?”:
var d = new Dictionary<String,Object>();
this.Request.QueryString.CopyTo(d);
答
也许一个自定义的模型绑定器来处理字典?似乎依赖查询字符串,虽然完全有效,却违背了框架的精神。它也可能使测试你的行动变得更加困难。
我的第一个想法是,这已经由默认的modelbinder facilites处理过,但这似乎并非如此。这么说,我还没有尝试过,但是这就是我开始:
Request.QueryString中的问题是,它也取消转义值,则进行反向转义,我需要处理。详细信息:firefox可以使用utf-8或latin-1来转义字符,但ASP.Net MVC一直使用其中一种。 – 2010-11-15 17:55:30
你能写一个例子吗? – 2010-11-15 20:30:20
请参阅问题中的示例 – 2010-11-15 23:11:03