代码之家  ›  专栏  ›  技术社区  ›  THX-1138

ASP.NET MVC解析URL查询部分

  •  1
  • THX-1138  · 技术社区  · 14 年前

    我想要点东西 ?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
    

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

    这里有一个相关的问题: ASP.NET MVC does not understand mixed url encoding (UTF-8/Latin-1)

    2 回复  |  直到 8 年前
        1
  •  2
  •   Marco Staffoli    14 年前

    Request.QueryString是一个类似于字典的NameValueCollection。

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

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

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

    var d = new Dictionary<String,Object>();
    this.Request.QueryString.CopyTo(d);
    
        2
  •  1
  •   nerraga    14 年前

    或许可以使用自定义的modelbinder来处理字典?似乎依赖querystring虽然完全有效,但违背了框架的精神。这也可能会让测试你的行为变得更加困难。

    我的第一个想法是,这已经由默认的modelbinder工具处理了,但似乎不是这样。也就是说,我还没试过,但我要从这里开始:

    An Intuitive Dictionary Model Binder for ASPnet MVC