如何从将要重写的URL读取QueryString参数并在新重写的URL中隐藏这些参数

时间:2011-01-03 18:59:48

标签: c# asp.net sql webforms url-rewriting

我有两个例子向您展示我想在这里实现的目标。 但是要指出我的问题有什么不同,我是否有一个参数化的URL,我想对我的应用程序实现URL重写。但我不想将URL中的参数转换为斜杠...“page.aspx?number = one”to“pages / one /”<<不是!

第一个例子:

  

http://localhost:1820/Pages/Default.aspx?page=2&start=5

  

http://localhost:1820/Pages/page2

第二个例子:

  

http://localhost:1820/Items/Details.aspx?item=3

  

http://localhost:1820/Items/ItemName

但我仍然需要原始网址中的所有参数

2 个答案:

答案 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参数值之间的关联。

例如,如果你要重写:

  

http://localhost:1820/Items/Details.aspx?item=3

要:

  

http://localhost:1820/Items/Widgets

您必须在某处存储项目3和窗口小部件是同义词。机会是,你已经这样做了。我想在您的数据库中,您有一个Products表(或其他)包含ProductIDProductName列,并且有ProductID=3ProductName=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及更高版本中的内置库)请求一样。还有一个可以下载的工作示例应用程序,它演示了本文中介绍的技术。

快乐编程!