在RouteTable中传递查询字符串参数

时间:2018-07-21 15:49:21

标签: c# asp.net webforms

我正在像这样在Global.asax文件中创建一个路由:

RouteTable.Routes.MapPageRoute("MyRoute", 
"myroute", "~/SomePage.aspx?parameter=123");

如您所见,我想从路由定义中传递查询字符串参数。

在代码隐藏页面中,我想访问参数,但是当我这样做时:

var TheParameter = Request.QueryString["parameter"];

变量为空。

如何从“路由”表中传递参数?

我想做这样的事情:

RouteTable.Routes.MapPageRoute("MyRoute123", 
"myroute123", "~/SomePage.aspx?parameter=123");
RouteTable.Routes.MapPageRoute("MyRoute456", 
"myroute456", "~/SomePage.aspx?parameter=456");
RouteTable.Routes.MapPageRoute("MyRoute789", 
"myroute789", "~/SomePage.aspx?parameter=789");

所有路由都由同一.aspx页处理,并且我需要不同的URL来由同一页处理。

1 个答案:

答案 0 :(得分:1)

这似乎很适合使用RouteData.DataTokens。您可以这样设置路线:

RouteTable.Routes.MapPageRoute(
        routeName: "MyRoute123",
        routeUrl: "myroute123",
        physicalFile: "~/SomePage.aspx",
        checkPhysicalUrlAccess: false,
        defaults: null,
        constraints: null,
        dataTokens: new RouteValueDictionary { { "parameter", "123" } }
    );

然后像这样检索参数:

object parameter;
if (Page.RouteData.DataTokens.TryGetValue("parameter", out parameter))
{
    // do something w/ parameter
}