Asp.net mvc 2 MVC HttpUtility.UrlEncode

Asp.net mvc 2 MVC HttpUtility.UrlEncode,asp.net-mvc-2,encoding,url-routing,asp.net-mvc-routing,Asp.net Mvc 2,Encoding,Url Routing,Asp.net Mvc Routing,我试图使用HttpUtility.UrlEncode对最终在URL中使用的字符串进行编码 范例 /串/http://www.google.com 或 /字符串/我的测试字符串 其中是传递给控制器的参数 我试过UrlEncode,但似乎不太合适 我的路线看起来像: routes.MapRoute( "mStringView", "mString/{sText}", new { controller = "mString", a

我试图使用HttpUtility.UrlEncode对最终在URL中使用的字符串进行编码

范例

/串/http://www.google.com

/字符串/我的测试字符串

其中是传递给控制器的参数

我试过UrlEncode,但似乎不太合适

我的路线看起来像:

routes.MapRoute(
            "mStringView",
            "mString/{sText}",
            new { controller = "mString", action = "Index", sText = UrlParameter.Optional }
        ); 
问题是编码的比特被解码了,这似乎在路由中的某个地方。。除了替换“”的“+”之类的东西没有被解码

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


谢谢

这个问题似乎在其他论坛上也出现过,一般建议不要依赖asp.net mvc的标准url编码。优点是url编码不一定像我们希望的那样对用户友好,这是自定义路由url的目标之一。例如,这:

http://server.com/products/Goods+%26+Services
可以更友好地写为

http://server.com/products/Good-and-Services
因此,定制url编码的优势不仅仅在于解决这个怪癖/错误。更多详细信息和示例如下:


这个问题似乎在其他论坛上也出现过,一般建议不要依赖asp.net mvc的标准url编码。优点是url编码不一定像我们希望的那样对用户友好,这是自定义路由url的目标之一。例如,这:

http://server.com/products/Goods+%26+Services
可以更友好地写为

http://server.com/products/Good-and-Services
因此,定制url编码的优势不仅仅在于解决这个怪癖/错误。更多详细信息和示例如下:


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

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

如果问题是“+”未被解码,请使用HttpUtility.urlpathcode进行编码,解码将按需要工作

从:

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


如果问题是“+”未被解码,请使用HttpUtility.urlpathcode进行编码,解码将按需要工作

从:

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


编码的URL是什么样子的?谷歌的例子应该显示
/string/http%3a%2f%2fwww.google.com
这里是问题所在/string/rich%27s+tags+test参数在控制器上是“rich's tags test”,而/Tag/testing+other+Tag参数在控制器上是“testing+other+Tag”,所以这个字符串的加号不会被替换????我不明白..在使用该值之前,您可能需要对控制器代码执行Http.UrlDecode。我可以。。但我可以看出这可能会在以后引起问题。因为预期的行为不一致。我想了解为什么控制员收到的信息不同?这条路线会影响这些吗?如果是这样,为什么它们不同呢?另一个问题。。(顺便说一句,谢谢你的帮助!)返回“HTTP错误400-错误请求”。要让这些类型的URL正常工作,编码的URL是什么样子的?谷歌的例子应该显示
/string/http%3a%2f%2fwww.google.com
这里是问题所在/string/rich%27s+tags+test参数在控制器上是“rich's tags test”,而/Tag/testing+other+Tag参数在控制器上是“testing+other+Tag”,所以这个字符串的加号不会被替换????我不明白..在使用该值之前,您可能需要对控制器代码执行Http.UrlDecode。我可以。。但我可以看出这可能会在以后引起问题。因为预期的行为不一致。我想了解为什么控制员收到的信息不同?这条路线会影响这些吗?如果是这样,为什么它们不同呢?另一个问题。。(顺便说一句,谢谢你的帮助!)返回“HTTP错误400-错误请求”。无论如何,要让这些类型的URL正常工作?