URL重写 - 目标页面未获取查询字符串值

时间:2010-10-14 08:17:12

标签: asp.net url-rewriting

我正在尝试将URL重写实现到我现有的应用程序中,并设法让页面和链接正常工作,但我的目标页面没有获取查询字符串值。

我的代码基于以下示例:

http://dotnetguts.blogspot.com/2008/07/url-rewriting-with-urlrewriternet.html

基本上我有一个default.aspx页面,其中包含指向另一个页面的链接;

directory_item.aspx?Item_Id=1&Category_Id=1
directory_item.aspx?Item_Id=2&Category_Id=1 and so on...

我的网络配置中的代码如下;

< rewriter >
   < rewrite url="~/(.+)-(.+).aspx" to="~/directory_item.aspx?MyTitleItem_Id=$2" / >
< /rewriter >

至于上述网站链接中提到的功能,我更改了它以适应我的类别ID;

Public Shared Function GenerateURL(ByVal Title As Object, ByVal strId As Object, ByVal strCategoryId As Object) As String
   Dim strTitle As String = Title.ToString()
   ...
   ...

   ...

   'Append ID at the end of SEO Friendly URL
        strTitle = "~/" & strTitle & "-" & Convert.ToString(strId) & "-" & Convert.ToString(strCategoryId) & ".aspx"

   Return strTitle
End Function

在我的页面上加载directory_item.aspx我查找查询字符串值Item_Id和Category_Id,因为我实现了上面的页面只返回一个没有数据的空白页面?我错过了什么,只是不知道在哪里?任何帮助将不胜感激。

URL确实已更改为“the-title-page-2-1.aspx”并加载样式和除数据之外的所有内容。所以我的代码肯定存在一些小问题。

到目前为止我发现了什么;

通过更改Web配置文件中的代码,我得到了它的工作;除了我现在需要拉入第二个查询字符串参数;

url="(.+)-(.+).aspx" to="~/directory_item.aspx?Item_Id=$2"

有关如何使第二个查询字符串参数起作用的任何提示?感谢

1 个答案:

答案 0 :(得分:0)

这是一个意见而非答案,因为我尝试过去使用'urlwriter.net'。

我切换到http://www.urlrewriting.net/

我发现更容易创建我想要的URL,重写规则看起来像:

    <add name="News" 
         virtualUrl="~/news/(?:[0-9a-zA-Z-]{1,255})-([0-9]{1,7}).(?:aspx|html)" 
         rewriteUrlParameter="ExcludeFromClientQueryString" 
         destinationUrl="~/content/news.aspx?id=$1" 
         rewrite="Application" 
         ignoreCase="true" />

在多个参数的情况下。

    <add name="News List" 
         virtualUrl="~/news/([a-zA-Z]{1,10})/([0-9]{4})/archive.(?:aspx|html)" 
         rewriteUrlParameter="ExcludeFromClientQueryString" 
         destinationUrl="~/content/news-list.aspx?month=$1&year=$2" 
         rewrite="Application" 
         ignoreCase="true" />

话虽如此,如果您有IIS7我建议获取URL重写模块:

http://www.iis.net/download/URLRewrite