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



我正在使用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";是"单词";。不过,我想要的是"字%2Dword";。

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

如有任何帮助,我们将不胜感激。

感谢

编辑

我的具体问题是,我想使用他们的名字在一个请求中获得更多的产品。例如,我有以下产品名称:学生,小学生";以及"生病,生病";(它们的名称包含逗号)。我还在请求中使用逗号分隔名称。

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

在服务器端;name";参数将由ASP自动解码。NET,结果是:学生、学生、生病、生病"所以现在我不知道哪个是分隔符。要求ServerVariables["HTTP_URL"]根据我的需要返回URL("产品/学生%2学生,生病的%2学生"),所以我认为必须有一种方法来获得原始值作为路由数据。

您看到的"原始值"实际上不是原始值,而是为了使URL对HTTP协议安全而编码的。

http://example.com/products/word%2Dword例如,最初是http://example.com/products/word-word并且当它从HTTP传输层出来时被转换回单词。

如果您通过服务器传递它。URLEncode您将返回相同的编码值(%2D而不是-),但如果您不能使用服务器变量,您是否可以访问服务器对象?

最新更新