代码之家  ›  专栏  ›  技术社区  ›  p.campbell

ASP.NET MVC-使用大于和小于字符的URL创建和处理

  •  2
  • p.campbell  · 技术社区  · 15 年前

    考虑一个指向用户配置文件页面的链接。一个页面正在创建该URL,如下所示:

    //Model.Name has value "<bad guy>"
    Html.ActionLink("foo, "ViewUser", new { id=5, title=Url.Encode(Model.Name) })
    

    实际结果是

    http://mysite/Users/5/%253cbad%2guy%253e
    

    当导航到该URL时,服务器将生成 HTTP Error 400 - Bad Request.

    当使用 < > ,但任何内容都可以来自用户,因此可以通过 Model.Name .

    问题: 鉴于 型号、名称 可能包含Unicode字符,或者在URL中包含非法字符:

    • 什么是去除非法字符的最好方法,或者对它们进行编码?
    • 在将用户的输入保存到数据库之前,是否应该对其进行清理,从而防止上面的编码尝试?
    • 在考虑将该字符串作为URL的一部分时,应该清除哪些字符(即不允许)?
    1 回复  |  直到 15 年前
        1
  •  2
  •   Robert Harvey    15 年前

    一种方法是对可能包含特殊字符的任何参数使用base 64编码。

    请参见以下示例:

    允许在ASP.Net MVC URL参数中使用特殊字符
    http://gathadams.com/2009/01/06/allowing-special-characters-forward-slash-hash-asterisk-etc-in-aspnet-mvc-urls/