带有ASP.NET路由的未经处理的原始URL

问题描述

| 我直接使用ASP.NET UrlRoutingModule(而不是通过MVC)将某些路由映射到其处理程序:
RouteTable.Routes.Add(new Route(\"products/{name}\",handler));
然后,在请求时,我从每个路由获取值:
RouteData routeData = HttpContext.Current.Request.RequestContext.RouteData;
routeData.Values.TryGetValue(\"name\",out value);
到目前为止,一切都很好,我正在为每条路线获取正确的值。我的问题是编码:我想获取路线数据的原始值。示例:对于上述路由,如果请求的URL为http://example.com/products/word%2Dword,则生成的\“ name \”为\“ word-word \”。我想要的是确切的值\“ word%2Dword \”。 我知道,使用ASP.NET可以使用Request.ServerVariables [\“ HTTP_URL \”]获取未经处理的原始URL,但不幸的是,我无法在此使用它。 任何帮助,将不胜感激。 谢谢 编辑 我的特定问题是,我希望使用它们的名称在单个请求中获得更多产品。例如,我有以下产品名称:\“ student,pupil \”和\“ sick,ill \”(它们的名称包含逗号)。我还使用逗号分隔请求中的名称。 我在客户端处理编码,因此GET请求看起来像这样:http://example.com/products/student%2cpupil,sick%2Cill(我分别编码每个名称,但不编码分隔器)。 在服务器端,ASP.NET会自动解码“ name”参数,结果是:“学生,学生,生病,生病”,所以现在我不知道哪个是分隔符。 Request.ServerVariables [\“ HTTP_URL \”]返回所需的URL(\“ products / student%2cpupil,sick%2Cill \”),因此我想必须有一种方法获取原始值作为路由数据。     

解决方法

        您看到的\“原始值\”实际上不是原始值,它是经过编码以使URL对HTTP协议安全的编码。 例如,http://example.com/products/word%2Dword最初是http://example.com/products/word-word,当它从HTTP传输层出来时又变成了word-word。 如果通过Server.URLEncode传递它,则将返回相同的编码值(%2D而不是-)-但是,如果无法使用Server变量,您是否可以访问Server对象?     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...