MVC HttpUtility.UrlEncode

时间:2010-10-21 16:14:15

标签: asp.net-mvc-2 encoding url-routing asp.net-mvc-routing

我正在尝试使用HttpUtility.UrlEncode来编码最终在URL中使用的字符串。

例如

/string/http://www.google.com

/ string / my test string

其中http://www.google.com是传递给控制器​​的参数。

我已经尝试过UrlEncode,但似乎没有正常工作

我的路线如下:

routes.MapRoute(
            "mStringView",
            "mString/{sText}",
            new { controller = "mString", action = "Index", sText = UrlParameter.Optional }
        ); 

问题是编码位被解码它似乎在路由中的某处...除了“+”之类的替换“”之类的东西没有被解码..

了解我的情况,其中UrlParameter可以是任何字符串,包括URL ..在将它们推入我的数据库之前对它们进行编码的最佳方法是什么,然后处理解码知道它们将作为参数传递给控制器?

谢谢!

3 个答案:

答案 0 :(得分:1)

似乎这个问题已经出现在其他论坛中,一般建议不要依赖于asp.net mvc的标准url编码。优点是url编码不一定像我们想要的用户友好,这是自定义路由网址的目标之一。例如,这个:

http://server.com/products/Goods+%26+Services

可以更友好地写成

http://server.com/products/Good-and-Services

因此,自定义网址编码除了解决这个怪癖/错误之外还有其他优势。更多细节和示例:

http://www.dominicpettifer.co.uk/Blog/34/asp-net-mvc-and-clean-seo-friendly-urls

答案 1 :(得分:0)

您可以将参数转换为字节数组并使用HttpServerUtility.UrlTokenEncode

答案 2 :(得分:0)

如果问题是“+”没有被解码,请使用HttpUtility.UrlPathEncode进行编码,解码将按照需要运行。

来自documentation of HttpUtility.UrlEncode

  

您可以使用UrlEncode方法或使用。编码URL   UrlPathEncode方法。但是,这些方法会返回不同的结果。   UrlEncode方法将每个空格字符转换为加号字符   (+)。 UrlPathEncode方法将每个空格字符转换为   字符串“%20”,表示十六进制表示法的空格。使用   编码URL的路径部分时的UrlPathEncode方法   为了保证一致的解码URL,无论哪个   平台或浏览器执行解码。