我正在尝试使用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 ..在将它们推入我的数据库之前对它们进行编码的最佳方法是什么,然后处理解码知道它们将作为参数传递给控制器?
谢谢!
答案 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,无论哪个 平台或浏览器执行解码。