使用ASP.NET路由的原始未处理URL

时间:2011-06-13 09:57:25

标签: asp.net url-routing

我直接使用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);

到目前为止一切都很好,我得到了每条路线的正确值。我的问题是编码:我想获得路由数据的原始值。示例:对于上述路线,如果请求的网址为http://example.com/products/word%2Dword,则生成的“名称”为“ word-word ”。我想要的是确切的值“ word%2Dword ”。

我知道使用ASP.NET我可以使用Request.ServerVariables [“HTTP_URL”]获取原始未处理的URL,但不幸的是我不能在这里使用它。

任何帮助都将不胜感激。

由于

修改

我的具体问题是,我希望使用他们的名字在一个请求中获得更多产品。我有以下产品名称:“学生,学生”和“生病,生病”(他们的名字包含逗号)。我还使用逗号分隔请求中的名称。

我在客户端处理编码,因此GET请求如下所示:http://example.com/products/student%2Cpupil,sick%2Cill我分别对每个名称进行编码,但我没有对分隔符进行编码)。 / p>

在服务器端,“name”参数将由ASP.NET自动解码,结果是:“学生,学生,生病,生病”所以现在我不知道哪个是分隔符。 Request.ServerVariables [“HTTP_URL”]返回我想要的URL(“ products / student%2Cpupil,sick%2Cill ”),所以我想必须有一种方法来获取原始值路线数据。

1 个答案:

答案 0 :(得分:0)

您所看到的“原始值”实际上并不是原始值,而是为了使HTTP协议安全而编码的内容。

例如,

http://example.com/products/word%2Dwordhttp://example.com/products/word-word开头,并在HTTP传输层出现时转回单词。

如果你通过Server.URLEncode传递它,你将得到相同的编码值(%2D而不是 - ) - 但是如果你不能使用Server变量,你是否可以访问Server对象?