2011-09-08 52 views
0

我需要解决在asp.net 4.0中使用路由功能进行url重写的问题。 当用户键入URL喜欢解析URL重写的查询字符串asp.net 4.0

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路由功能的帮助下完成这种映射。

回答

2

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

所以你有3个选项。

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

2)更新MyProduct.aspx在查询字符串检查产品id如果prodid未发现和使用MapPageRoute(新页面具有访问原始查询字符串)。

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> 
+0

感谢...ü给product.aspx/{*}的Prodid。为什么* *的含义是什么。也告诉我们可以使用什么其他标志。 –

+0

我收到*的错误。错误文本是“一个全部收集参数只能显示为路由URL的最后一部分。 参数名称:routeUrl“请指导我解决它 –

+0

对不起,我得到了选项2错误,我正在考虑一个不同的场景 - 我已经更新,'*'使最后一个参数匹配最后一个参数分割。 – TheCodeKing