解析URL重写的asp.net 4.0的查询字符串

时间:2011-09-08 06:15:15

标签: asp.net url-routing

我需要使用asp.net 4.0中的路由功能解决url重写问题。 当用户键入url时

  

www.mysite.com/product.aspx?id=101

然后右页显示,但假设我更改了页面位置和名称,以及用户输入的网址类似

  

www.mysite.com/product.aspx?id=101

然后会发现页面错误。

所以请告诉我如何使用asp.net 4.0路由功能解决这种情况。 有可能吗?

我处理路由和我的示例代码

 void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup
        RouteTable.Routes.MapPageRoute
              ("Source", "Source/{ID}/{Title}", "~/Source.aspx");
        RouteTable.Routes.MapPageRoute
              ("Source1", "MyData/Source/{ID}/{Title}", "~/MyData/Source.aspx");
    }

上面的代码只是示例,我通过这种方式重写url。这很容易。 但是如果我需要通过路由解决上面的url映射问题,那么我怎么能这样做以及我需要在Application_Start事件中编写什么样的代码。

我希望用户输入

  

www.mysite.com/product.aspx?id=101

然后它应该重定向到

  

www.mysite.com/prod/Myproduct.aspx?prodid=101

这个网址。所以请指导我如何在asp.net 4.0路由功能的帮助下进行这种映射。

1 个答案:

答案 0 :(得分:2)

您可以路由到包含查询字符串的路径的唯一方法是使用自定义处理程序。默认情况下,路由传递RouteData中的变量。

所以你有3个选择。

1)编写一个自定义路由处理程序来重写路径获取RouteData并将其添加到查询字符串。我为this in this question编写了类似代码的代码。

2)如果在id中找不到,请更新MyProduct.aspx以检查QueryString中的产品prodid并使用MapPageRoute(新页面可以访问原始查询字符串)。< / p>

RouteTable.Routes.MapPageRoute(
                    "product", 
                    "product.aspx",
                    "~/prod/myproduct.aspx");

3)使用IIS7重写规则

<rewrite>
    <rules>
        <rule name="product">
            <match url="product.aspx?id=([0-9]+)" />
            <action type="Rewrite" url="prod/myproduct.aspx?prodid={R:1}" />
        </rule>
    </rules>
</rewrite>