我有两个例子向您展示我想在这里实现的目标。 但是要指出我的问题有什么不同,我是否有一个参数化的URL,我想对我的应用程序实现URL重写。但我不想将URL中的参数转换为斜杠...“page.aspx?number = one”to“pages / one /”<<不是!
第一个例子:
要
第二个例子:
要
但我仍然需要原始网址中的所有参数
答案 0 :(得分:1)
在您的示例中,您将完全从URL中删除数据,但我没有看到在这里可以实现您想要的方式。
例如,您想要成为/ pages / page2的/default.aspx?page=2&start=5的第一个网址。
理论上,default.aspx?page = 2和default.aspx?page = 2& start = 5可能是不同的行为。你想怎么代表那个。如果/ pages / page2始终映射到第二个示例的那个,你就没有办法调用前者。
我想我们需要更多地了解你想要完成的事情。
答案 1 :(得分:0)
简而言之,您需要以某种方式存储未重写的查询字符串参数值与重写的URL参数值之间的关联。
例如,如果你要重写:
要:
您必须在某处存储项目3和窗口小部件是同义词。机会是,你已经这样做了。我想在您的数据库中,您有一个Products
表(或其他)包含ProductID
和ProductName
列,并且有ProductID=3
和ProductName=Widgets
的记录。
我建议使用ASP.NET Routing来处理URL重写。简而言之,您将定义一个类似Items/{ProductName}
的路由规则,并将其映射到ASP.NET页面~/Items/Details.aspx
。这样的路由规则说:“只要URL以Items / 形式进入,就执行~/Items/Details.aspx
页面。”在~/Items/Details.aspx
页面中,您可以通过编程方式确定URL中的 ProductName 值(也就是说,您可以确定用户正在访问Items / Widgets,在此示例中)并且您可以加载/显示相应的信息。
查看我的这篇文章 - URL Routing in ASP.NET 4。它显示了如何使用URL重写,就像您使用ASP.NET Routing(ASP.NET 3.5 SP1及更高版本中的内置库)请求一样。还有一个可以下载的工作示例应用程序,它演示了本文中介绍的技术。
快乐编程!